|
|
|
| При загрузке фалов на сервер, если файл с таким именем уже существует, то он перезаписывается. Как исправить такой косяк? Можно ли чтобы файл с такимже именем дополнялся номером от 1 до 9. или как то иначе? | |
|
|
|
|
|
|
|
для: Jaguar1974
(04.01.2011 в 21:58)
| | А каким кодом, вы загружаете файлы на сервер? Дело в том, что первоначально файлам назначается временное имя, во временной директории, откуда вы извлекаете их при помощи функции move_uploaded_file() или copy() - вот на этом этапе и нужно отслеживать имена файлов. | |
|
|
|
|
|
|
|
для: Jaguar1974
(04.01.2011 в 21:58)
| | Как-то так..
<?php
// Если имя известно заранее
$name = 'name';
$i = null;
while (file_exists('path/to/file'. $name . $i))
{
$i = !empty($i) ? $i : 0;
++$i;
}
$name .= $i;
// Если имя генерируется в процессе
do
{
$name = ''; // генерируем имя
} while(file_exists('path/to/file'. $name))
|
| |
|
|
|
|
|
|
|
для: neadekvat
(04.01.2011 в 22:04)
| | Вот код моего обработчика. Как мне его изменить?
<?php
if (isset($_POST['name'])) {$name = $_POST['name'];}
if (isset($_POST['email'])) {$email = $_POST['email'];}
if (isset($_POST['message'])) {$message = $_POST['message'];}
if (isset($_POST['myfile'])) {$myfile = $_POST['myfile'];}
if (isset($_POST['uploadfile'])) {$uploadfile = $_POST['uploadfile'];}
$address = 'businessdeleu@gmail.com';
$sub = "Отчет тестирования посетителя сайта mymql.ru";
$mes = "Отправил: $name \n Его email: $email \n
Комментарий посетителя: \n $message \n
Имя загруженного файла $uploadfile";
$verify = mail ($address,$sub,$mes,"Content-type:text/plain; charset = windows-1251\r\nFrom:$email");
if ($verify == "true") {echo "Сообщение отправлено";}
else {echo "Сообщение не отправлено";}
// Каталог, в который мы будем принимать файл:
$uploaddir = './reports/';
$uploadfile = $uploaddir.basename($_FILES['uploadfile']['name']);
// Копируем файл из каталога для временного хранения файлов:
if (copy($_FILES['uploadfile']['tmp_name'], $uploadfile))
{
echo "<h3>Файл успешно загружен на сервер</h3>";
}
else { echo "<h3>Ошибка! Не удалось загрузить файл на сервер!</h3>"; exit; }
// Выводим информацию о загруженном файле:
echo "<h3>Информация о загруженном на сервер файле: </h3>";
echo "<p><b>Оригинальное имя загруженного файла: ".$_FILES['uploadfile']['name']."</b></p>";
echo "<p><b>Размер загруженного файла в байтах: ".$_FILES['uploadfile']['size']."</b></p>";
?>
|
| |
|
|
|
|
|
|
|
для: Jaguar1974
(04.01.2011 в 22:14)
| | А т.е. вы не хотите, чтобы последующие загрузки перезаписывали ранее загруженные файлы? Тогда к имени файла прибавьте какое-нибудь уникальное значение, например, текущее время
<?php
$uploadfile = $uploaddir.time().basename($_FILES['uploadfile']['name']);
?>
|
Если у вас пользователи одновременно загружают много файлов, добавьте к имени еще уникальный идентификатор пользователя или номер его сессии. | |
|
|
|
|
|
|
|
для: cheops
(04.01.2011 в 22:22)
| | img src=wefkmlsdnf239-42i2wjipfjedfi23fdnfsdjnsdjnsdivmjk l23490230423890423904329fnsenfe.jpg
Зато уникальное.
substr( md5(time()), 0, 12);
Аккуратно и уникально. | |
|
|
|
|
|
|
|
для: neadekvat
(04.01.2011 в 22:23)
| | Достаточно id сессии и времени. | |
|
|
|
|
|
|
|
для: cheops
(04.01.2011 в 22:22)
| | Спасибо! Проблема решена! | |
|
|
|
|
|
|
|
для: Jaguar1974
(04.01.2011 в 21:58)
| | Именуйте файлы при загрузке своим уникальным именем, а оригинальное имя только для вывода как информация. | |
|
|
|