Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Загрузка файлов на сервер
 
 автор: Jaguar1974   (04.01.2011 в 21:58)   письмо автору
 
 

При загрузке фалов на сервер, если файл с таким именем уже существует, то он перезаписывается. Как исправить такой косяк? Можно ли чтобы файл с такимже именем дополнялся номером от 1 до 9. или как то иначе?

  Ответить  
 
 автор: cheops   (04.01.2011 в 22:03)   письмо автору
 
   для: Jaguar1974   (04.01.2011 в 21:58)
 

А каким кодом, вы загружаете файлы на сервер? Дело в том, что первоначально файлам назначается временное имя, во временной директории, откуда вы извлекаете их при помощи функции move_uploaded_file() или copy() - вот на этом этапе и нужно отслеживать имена файлов.

  Ответить  
 
 автор: neadekvat   (04.01.2011 в 22:04)   письмо автору
 
   для: 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))

  Ответить  
 
 автор: Jaguar1974   (04.01.2011 в 22:14)   письмо автору
 
   для: 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>";


?>

  Ответить  
 
 автор: cheops   (04.01.2011 в 22:22)   письмо автору
 
   для: Jaguar1974   (04.01.2011 в 22:14)
 

А т.е. вы не хотите, чтобы последующие загрузки перезаписывали ранее загруженные файлы? Тогда к имени файла прибавьте какое-нибудь уникальное значение, например, текущее время
<?php
  $uploadfile 
$uploaddir.time().basename($_FILES['uploadfile']['name']);
?>

Если у вас пользователи одновременно загружают много файлов, добавьте к имени еще уникальный идентификатор пользователя или номер его сессии.

  Ответить  
 
 автор: neadekvat   (04.01.2011 в 22:23)   письмо автору
 
   для: cheops   (04.01.2011 в 22:22)
 

img src=wefkmlsdnf239-42i2wjipfjedfi23fdnfsdjnsdjnsdivmjk l23490230423890423904329fnsenfe.jpg
Зато уникальное.

substr( md5(time()), 0, 12);
Аккуратно и уникально.

  Ответить  
 
 автор: sim5   (04.01.2011 в 22:27)   письмо автору
 
   для: neadekvat   (04.01.2011 в 22:23)
 

Достаточно id сессии и времени.

  Ответить  
 
 автор: Jaguar1974   (04.01.2011 в 22:52)   письмо автору
 
   для: cheops   (04.01.2011 в 22:22)
 

Спасибо! Проблема решена!

  Ответить  
 
 автор: sim5   (04.01.2011 в 22:22)   письмо автору
 
   для: Jaguar1974   (04.01.2011 в 21:58)
 

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

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования