СообЧа > База Знаний > Интернет > Веб-строительство > PHP

Вопрос

Как организовывать закачку файла на сервер с помощью PHP?

Ответ

Часть 1. HTML форма

form enctype="multipart/form-data" action="upload.php" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="1000">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>


Часть 2. upload.php

<?
if (is_uploaded_file($userfile))
{
copy($userfile, "/place/to/put/uploaded/file");
}
else
{
echo "Possible file upload attack: filename '$userfile'.";
}
/* …or… */
move_uploaded_file($userfile, "/place/to/put/uploaded/file");
?>


Немного комментария.
upload.php вызывается уже после upload'а как такового. При этом автоматически определяются 4 переменные (вместо userfile будер стоять то, что вы напишете в форме HTML):
a.. $userfile — Имя временного файла, где содержится файл, который проаплодили. Этот файл физически размещен на сервере, где у вас PHP.
b.. $userfile_name — Настоящее имя аплоднутого файла. Передается броузером.
c.. $userfile_size — Размер аплоднутого файла. Передается броузером. Можно использовать для проверки — Размер файла $userfile д.б. равен этому значению. Если нет — был какой-то глюк, либо кто-то пытается вломиться на сервер хакерским способом.
d.. $userfile_type — MIME тип аплоднутого файла, например, "image/gif".

Передается броузером. Следует заметить, что если клиент аплодит, скажем, Word document, но на его компе нет самого Word'а, то здесь будет не application/msword, а что-то типа application/octet-steam — точно не помню — проверьте сами.

Обратите внимание, что PHP ограничивает максимальный размер файла для аплода — параметр upload_max_filesize файла php.ini. По умолчанию — 2 метра. Если проаплодите больше — будет нулевой размер. Лучше всего устанавливать в это значение параметр MAX_FILE_SIZE (в байтах!) в форме, тогда это будет контролировать броузер, и клиент не будет с недоумением спрашивать после аплода 20 мегабайт, почему проаплодилось 0 байт.

И еще — временный файл автоматически убивается по завершении upload.php. Так, что если аплоад требуется где-то сохранить, делайте это ручками в скрипте.

Павел



Copyright © 2000-2004 Сообщество Чайников
Контактная информация