|
|
|
| Есть скрипт обработчика загрузки файла на сервер:
$allowed_filetypes = array('.jpg','.gif');
$max_filesize = 50000;
$upload_path = '../img/';
$filename = $_FILES['img']['name'];
$ext = substr($filename, strpos($filename,'.'), strlen($filename)-1);
if(!in_array($ext,$allowed_filetypes))
die('Данный тип файла не поддерживается.');
if(filesize($_FILES['img']['tmp_name']) > $max_filesize)
die('Фаил слишком большой.');
if(!is_writable($upload_path))
die('Невозможно загрузить фаил в папку. Установите права доступа - 777.');
if(move_uploaded_file($_FILES['img']['tmp_name'],$upload_path . $filename))
echo 'Ваш фаил успешно загружен';
else
echo 'При загрузке возникли ошибки. Попробуйте ещё раз.';
Как мне сделать так, что бы файл загружался с нужным мне именем? Например, человек выбирает файл с именем "ochen_horoshiy_film.jpg", а на сервер он загружался с таким именем: "film_124.jpg". | |
|
|
|
|
|
|
|
для: lElectroHardl
(26.07.2010 в 12:41)
| | $filename = $_FILES['img']['name'] ;
взамест $_FILES['img']['name'] присваивайте нужное имя файла "film_124.jpg"
либо сразу указывайте в функции move_uploaded_file | |
|
|
|
|
|
|
|
для: Valick
(26.07.2010 в 12:47)
| | >>>либо сразу указывайте в функции move_uploaded_file
Вместо if(move_uploaded_file($_FILES['img']['tmp_name'],$upload_path . $filename)),
написал: if(move_uploaded_file($_FILES['img']['tmp_name'],$upload_path . "file_121212"))
Имя присваивается, а разрешение не присваивается.
В итоге получается файл: "file_121212", а не "file_121212.jpg" | |
|
|
|
|
|
|
|
для: lElectroHardl
(26.07.2010 в 13:09)
| | Во первых надо узнавать тип файла, только никак не таким образом:
substr($filename, strpos($filename,'.'), strlen($filename)-1);
|
все это глупости, которые легко обойти.
Во вторых добавляйте расширение в имя по узнанному типу файла. | |
|
|
|
|
|
|
|
для: sim5
(26.07.2010 в 13:11)
| | Все же не могу понять, что и где нужно изменить, что бы загружаемый файл менял имя на нужное?
Простите за свое непонимание... | |
|
|
|
|
|
|
|
для: lElectroHardl
(26.07.2010 в 14:48)
| | я же Вам написал
$filename = $_FILES['img']['name'] ;
|
замените на:
$filename = "film_124.jpg"
|
| |
|
|
|
|
|
|
|
для: Valick
(26.07.2010 в 14:50)
| | А почему именно .jpg? И зачем эту переменную переопределять, пермещаете вы не ее. | |
|
|
|
|
|
|
|
для: sim5
(26.07.2010 в 14:51)
| | а это разве мои проблемы? что автор спросил, то я и ответил
И зачем эту переменную переопределять, пермещаете вы не ее.
началось..... | |
|
|
|
|
|
|
|
для: Valick
(26.07.2010 в 14:53)
| | Это ваши проблемы - $_FILES['img']['name'], это всего лишь информация к размышлению, не обязательно ее и использовать. | |
|
|
|
|
|
|
|
для: sim5
(26.07.2010 в 14:55)
| | я человеку показал всего лишь куда сунуть имя файла которое он хочет, как он будет его формировать и как будет контролировать тип и расширение файла, повторюсь - это не мои проблемы...
$_FILES['img']['name'], - где я написал что его использовать обязательно?
где я написал что я перемещаю $filename?
мне что Вам опять кофе наводить? :) | |
|
|
|
|
|
|
|
для: Valick
(26.07.2010 в 15:00)
| | Ну я и говорю, нафик он нужен, если формируем вообще свое имя? :) | |
|
|
|
|
|
|
|
для: lElectroHardl
(26.07.2010 в 14:48)
| | move_uploaded_file (string filename, string destination)
Эта функция проверяет, является ли файл filename правильно загруженным файлом (что он был загружен через PHP-механизм HTTP POST). Если файл является правильным, он будет переименован в файл destination. | |
|
|
|
|
|
|
|
для: sim5
(26.07.2010 в 13:11)
| | таким образом только расширение файла можно узнать, но не тип файла. | |
|
|
|
|
|
|
|
для: Slo_Nik
(26.07.2010 в 15:59)
| | А мне то это зачем? Я так не проверяю тип файла. | |
|
|
|
|
|
|
|
|
для: Valick
(26.07.2010 в 16:06)
| | Почитав критику в адрес моего метода загрузки файла поняв, он устаревший.
Выложите кто-то скрипт своего загрузчика файлов на сервер. | |
|
|
|
|
|
|
|
для: lElectroHardl
(26.07.2010 в 17:09)
| | Поиском не мало найти можно, сколько же их выкладывать. Да и что выкладывать. Начинайте загрузку проверкой ключа $_FILES['userfile']['error'], и если нет ошибок начинаете проверку загружаемого файла. Сперва, это тип файла, и для изображений можно использовать функцию getimagesize(), а не доверять расширению файла, которое можно подцепить к любому. Если это изображение, значит запоминаем расширение его типа. Далее проверки по условию: размер, расширение....
Если все ОК, формируем имя файла для хранения на диске, добавляя к нему ранее запомненное расширение. А вот оригинальное имя файла вполе может и пригодиться, но не как имя файла для хранения, а для информации или при скачивании файла пользователем. Если для изображения еще можно отдать пользователю файл werwefosajhdkaj23hekjfs.jpg, то для файлов, например, документа какого либо, такое название, это морока для пользователя.
Перемещайете файл в папку, и если файл успешно перемещен, записываете о нем информацию в базу. Вот и весь скрипт.
PS. die('Невозможно загрузить фаил в папку. Установите права доступа - 777.'); - это если вам, как для администратора сайта, а вот пользователя такие проблемы не должны волновать.
И не прекращать работу надо при ошибках, а возвращать пользователю форму для их исправления. | |
|
|
|
|
|
|
|
для: sim5
(26.07.2010 в 23:33)
| | Спасибо, буду копать. | |
|
|
|