Загрузка файлов

Загрузка файлов на сервер происходит методом POST.

Примерный вид формы для загрузки файлов:

<form enctype="multipart/form-data" action="__URL__" method="POST"> Отправить этот файл: <input name="userfile" type="file" /> <input type="submit" value="Send File" /></form>

Параметр enctype формы задает тип отправляемых данных, по умолчанию = application/x-www-form-urlencoded, при котором данные кодируются таким же образом, как GET-запрос (var1=val1&var2=val2&…). Для передачи файлов необходимо обязательно использовать multipart/form-data.

Все принятые файлы принимаются веб-сервером автоматически и сохраняются во временной папке, (эта папка может быть переобозначена в php.ini при помощи директивы upload_tmp_dir). За дальнейшую обработку файлов полностью отвечает ваш скрипт. По окончанию работы скрипта временные файлы будут удалены.

Информация о принятых файлах хранится в суперглобальном массиве $_FILES (уст. $HTTP_POST_FILES):

$_FILES['userfile']['name']

Оригинальное имя файла на компьютере клиента.

$_FILES['userfile']['type']

Mime-тип файла, в случае, если браузер предоставил такую информацию. Пример: "image/gif". Этот mime-тип не проверяется в PHP, так что не полагайтесь на его значение без проверки.

$_FILES['userfile']['size']

Размер в байтах принятого файла. 0, если файл не был загружен.

$_FILES['userfile']['tmp_name']

Временное имя, с которым принятый файл был сохранен на сервере.

$_FILES['userfile']['error']

Код ошибки, которая может возникнуть при загрузке файла (PHP 4.2.0+).

bool is_uploaded_file (string $filename) – проверяет, был ли успешно загружен файл. Для правильной работы, функции is_uploaded_file() нужен аргумент вида $_FILES['userfile']['tmp_name'], имя закачиваемого файла на клиентской машине $_FILES['userfile']['name'] не подходит.

bool move_uploaded_file (string $filename, string $destination) – пытается переместить загруженный файл в указанное место. Если файл не является загруженным или не может быть перемещен, возвращает false.

Пример:


$uploadfile = '/var/www/uploads/'. basename($_FILES['userfile']['name']);

echo '<pre>';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
echo "Файл корректен и был успешно загружен.\n";
} else {
echo "Возможная атака с помощью файловой загрузки!\n";
}
echo 'Некоторая отладочная информация:'; print_r($_FILES);
print "</pre>";

PHP поддерживает возможность передачи из форм HTML массивов данных, в том числе и с файлами. Это будет выглядит примерно так:

В HTML: <input type="file" name="pictures[]"> В PHP: $_FILES['userfile']['name'][0], $_FILES['userfile']['name'][1], …

Директивы php.ini:

Имя По умолчанию  
file_uploads "1" Разрешена ли загрузка файлов
upload_tmp_dir NULL Расположение временной папки
max_input_nesting_level   Максимальный уровень вложенности переменных
max_input_vars   Максимальное количество передаваемых запросом переменных
upload_max_filesize "2M" Максимальный размер загружаемого файла
max_file_uploads   Максимальный суммарный размер загружаемых файлов

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: