С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 1
Регистрация: 12.03.2018
Сообщений: 331

Перезапись файла php

06.02.2020, 01:40. Показов 1967. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Загружаю файл и переименовываю его в рандомное имя, но если обновить страницу с формой, то тот же файл отправляется но уже с другим названием... Как это исправить?

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?php
function load_file() {
// Перезапишем переменные для удобства
  $fileName  = $_FILES['product_file']['name'];
$filePath  = $_FILES['product_file']['tmp_name'];
$errorCode = $_FILES['product_file']['error'];
$error = false;
 
// Проверим на ошибки
if ($errorCode !== UPLOAD_ERR_OK || !is_uploaded_file($filePath) || $error === true) {
 
    // Массив с названиями ошибок
    $errorMessages = [
        UPLOAD_ERR_INI_SIZE   => 'Размер файла превысил значение upload_max_filesize в конфигурации PHP.',
        UPLOAD_ERR_FORM_SIZE  => 'Размер загружаемого файла превысил значение MAX_FILE_SIZE в HTML-форме.',
        UPLOAD_ERR_PARTIAL    => 'Загружаемый файл был получен только частично.',
        UPLOAD_ERR_NO_FILE    => 'Файл не был загружен.',
        UPLOAD_ERR_NO_TMP_DIR => 'Отсутствует временная папка.',
        UPLOAD_ERR_CANT_WRITE => 'Не удалось записать файл на диск.',
        UPLOAD_ERR_EXTENSION  => 'PHP-расширение остановило загрузку файла.',
    ];
 
    // Зададим неизвестную ошибку
    $unknownMessage = 'При загрузке файла произошла неизвестная ошибка.';
    // Если в массиве нет кода ошибки, скажем, что ошибка неизвестна
    $outputMessage = isset($errorMessages[$errorCode]) ? $errorMessages[$errorCode] : $unknownMessage;
 
    // Выведем название ошибки
    echo $outputMessage;
            $_FILES = null;
        $_POST = null;
        $error = true;
}
 
// Создадим ресурс FileInfo
$fi = finfo_open(FILEINFO_MIME_TYPE);
 
// Получим MIME-тип
$mime = (string) finfo_file($fi, $filePath);
// Закроем ресурс
finfo_close($fi);
 
// Проверим ключевое слово image (image/jpeg, image/png и т. д.)
if (($mime === 'application/x-rar-compressed' || $mime === 'application/zip' || $mime === 'application/x-rar' || $mime === 'application/zip') === false) { echo 'Можно загружать только архивы zip и rar.';
            $_FILES = null;
        $_POST = null;
        $error = true;
}
 
// Зададим ограничения для архива
$limitBytes  = 100000000;
 
// Проверим нужные параметры
if (filesize($filePath) > $limitBytes) {echo 'Размер архива не должен превышать 100000кб.'; $_FILES = null; $_POST = null; $error = true;}
 
// Сгенерируем новое имя файла на основе MD5-хеша
$rand = rand();
$FileType = strtolower(pathinfo($fileName,PATHINFO_EXTENSION));
// Переместим картинку с новым именем и расширением в папку /img
if ($error) {
    $_FILES = null;
    $_POST = null;
    $error = true;
}else {
  move_uploaded_file($filePath, __DIR__ . '/rar-zip/' . $rand.'.'.$FileType);
}
}
?>
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.02.2020, 01:40
Ответы с готовыми решениями:

Перезапись файлов на сервере php!
Всем добрый день! Может это жутко банальный вопрос, я новенький здесь, но в интернете ответа не нашел... У меня апачи сервер с php,...

Перезапись файла
Добрый день. НаписАл программку на php которая достаёт инфу с сайта и сохраняет в excel файл на локальном компьютере. Необходимо...

Перезапись файла
Всем привет. Мне нужно удалить строку (произвольную) из файла. Как я понял, единственный способ это сделать - полностью стереть...

4
Невнимательный
 Аватар для ft4l
2840 / 1269 / 358
Регистрация: 08.02.2013
Сообщений: 7,393
Записей в блоге: 2
06.02.2020, 06:38
Как вариант - два варианта ) с сессиями и перенаправлением
Запретить повторную отправку POST запроса при обновлении страницы если понял о чём Вы
0
0 / 0 / 1
Регистрация: 12.03.2018
Сообщений: 331
06.02.2020, 12:42  [ТС]
Ну это тоже хорошая информация, просто человек может загружать один и тот же файл много раз, но с разным названием. Вот как такого можно избежать?
0
Невнимательный
 Аватар для ft4l
2840 / 1269 / 358
Регистрация: 08.02.2013
Сообщений: 7,393
Записей в блоге: 2
06.02.2020, 13:20
Цитата Сообщение от koks_ikkkk Посмотреть сообщение
один и тот же файл много раз
На стороне сервера видно только имя файла, ... обычно.
Как бы если хранить ещё где-то список всего загружаемого так-себе вариант,
Потому что файлы с одинаковым именем, не обязательно могут быть одним файлом,
и даже может измениться содержимое одного и того-же файла, я так думаю...

Остаются наверное только варианты с хранением на сервере чего-то такого ))
вместе с именем файла
Пример #1 Использование hash_file()
PHP
1
2
3
4
5
6
<?php
/* Создаем файл, чтобы вычислить его хеш */
file_put_contents('example.txt', 'Наглый коричневый лисёнок прыгает вокруг ленивой собаки.');
 
echo hash_file('md5', 'example.txt');
?>
Результат выполнения данного примера:
bff8b4bc8b5c1c1d5b3211dfb21d1e76
Или сравнивать загружаемое с ранее загруженным....
Но останется возможность переименовывать файл и загружать его снова и снова
0
 Аватар для vinikon
340 / 160 / 89
Регистрация: 16.01.2020
Сообщений: 771
06.02.2020, 16:38
давно еще баловался с поисками дубликатов у себя на локалке. но капитально, с большим количеством - нет. поглядите вот здесь информацию для обработки больших количество файлов, может, пригодится:
Как определить дубликаты картинок с помощью PHP
Libpuzzle индексирует миллионы фотографий?

Добавлено через 12 минут
пример для imagick
PHP
1
2
3
4
$im1 = new Imagick('base/1.jpg');
$im2 = new Imagick('base/2.jpg'); 
$res = $im1->compareImages($im2, Imagick::METRIC_MEANSQUAREERROR);
$d = round($res[1]/1000);
если $d < 30 - то похожие
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.02.2020, 16:38
Помогаю со студенческими работами здесь

Перезапись текстового файла
Здравствуйте. Хотел на сайте сделать функцию &quot;добавить новость&quot;. Все сделал, но вот только новость не создается. Помогите пожалуйста. Вот...

перезапись из файла в другой
Здравствуйте, вопрос такой: есть txt файл в котором находятся данные, нужно все строки из файла вывести на страницу сайта и после каждой...

Перезапись файла или хранение в БД?
Суть темы в заголовке. Есть файл с массивом: $arr = array( array('key 1' =&gt; 'value 1', 'key 2' =&gt; 'value 2', 'key 3' =&gt;...

Добавление и перезапись файла с новым именем
Здравствуйте. Есть поля на странице: &lt;input type='file' name='image' value='&lt;?=$myrow;?&gt;'&gt; &lt;input type='hidden' name='del'...

pChart, передача переменной из 1-го файла php в файл php построения графика, метод include
Есть два файла: 1-й: здесь запрашивается график т.е 2-й файл, а также из 1-го нужно передать переменную $name1 во 2-й файл для построения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru