В этой статье я расскажу и приведу примеры по загрузке одного или нескольких файлов на сервер, средствами php. Как создать форму для загрузки файлов php. Как создать обработчик данных для загрузки файлов.
Загрузка файлов осуществляется через форму, которая имеет параметр enctype="multipart/form-data", а также поля type="file".
Пример формы:
<form action="index.php" method="post" enctype="multipart/form-data">
<input type="file" name="name_file">
<input type="submit" value="Загрузить">
</form>
По этой форме видно, что данные для обработки будут переданы index.php.
Содержимое файла обработки:
$filedir= dirname(__FILE__); //Узнаем каталог обработчика, в нашем случае index.php
$upload=$filedir.DIRECTORY_SEPARATOR."upload".DIRECTORY_SEPARATOR.$_FILES['name_file']['name']; //Директория загрузки файлов. В нашем случае загрузка осуществится в папку upload, которая находится на одном уровне с index.php.
if(move_uploaded_file($_FILES[‘name_file ']['tmp_name'], $upload)){ //Копируем файл в директорию которая указана выше.
chmod($upload,0666); // Выставляем права на загруженный файл
Print ("Файл ".$_FILES['name_file']['name']." успешно загружен"); //Выводим сообщение, если файл успешно загружен.
}
else{
Print ("Ошибка загрузки ".$_FILES['name_file']['name']); //Выводим сообщение если файл загружен с ошибкой.
}
Теперь более подробно о
суперглобальном массиве $_FILES и его содержимом. $_FILES[‘
Имя поля в форме'][‘
содержимое']
- $_FILES['name_file']['name'] - имя файла до отправки его на сервер
- $_FILES['name_file']['size'] - размер отправленного файла в байтах
- $_FILES['name_file']['type'] - MIME-тип отправленного файла (если браузер смог его определить).
- $_FILES['name_file']['tmp_name'] - имя файла во временном каталоге.
- $_FILES['name_file']['error'] - Код ошибки, которая может возникнуть при загрузке файла.
Виды ошибок $_FILES['']['error']:
- UPLOAD_ERR_OK Значение: 0; Ошибок не возникало, файл был успешно загружен на сервер.
- UPLOAD_ERR_INI_SIZE Значение: 1; Размер принятого файла превысил максимально допустимый размер, который задан директивой upload_max_filesize конфигурационного файла php.ini
- UPLOAD_ERR_FORM_SIZE Значение: 2; Размер загружаемого файла превысил значение MAX_FILE_SIZE, указанное в HTML-форме.
- UPLOAD_ERR_PARTIAL Значение: 3; Загружаемый файл был получен частично.
- UPLOAD_ERR_NO_FILE Значение: 4; Файл не загружен.
Также хочется отметить, что возможно загрузка нескольких файлов, для этого нужно использовать различные значения name для тега input или можно автоматически получить организованной в массив информации о нескольких одновременно загружаемых файлах. Для этого используется тот же синтаксис отправки массива из HTML-формы, что и для множественных полей select и checkbox.
Пример формы загрузки нескольких файлов:
<form action="index.php" method="post" enctype="multipart/form-data">
<input type="file" name="name_file[]">
<input type="file" name="name_file[]">
<input type="file" name="name_file[]">
<input type="submit" value="Загрузить">
</form>
Теперь данные переданные из такой формы будут иметь такой вид:
- $_FILES['name_file']['name'][0] - имя первого файла до отправки его на сервер
- $_FILES['name_file']['name'][1] - имя второго файла до отправки его на сервер
- $_FILES['name_file']['name'][2] - имя третьего файла до отправки его на сервер
Аналогичными будут переменные $_FILES['userfile']['tmp_name'][0], $_FILES['userfile']['size'][0] и $_FILES['userfile']['type'][0], $_FILES['name_file']['error'][0]
Напоследок хочется отметить, что загрузка бинарных файлов (картинок, архивов, программ и т.д.) стандартным методом часто приводит к тому, что файлы оказываются "битыми". Это связано с настройками Apache к перекодировкам. Для того, чтоб такого не случалось, допишите в файл httpd.conf следующие данные:
<Location />
CharsetRecodeMultipartForms Off
</Location>
Также в файле php.ini имеет всего три параметра, связанные с загрузкой файлов на сервер:
- file_uploads=On - разрешает загрузку файлов на сервер по протоколу HTTP
- upoad_tmp_dir=/tmp - устанавливает каталог для временного хранения загруженных файлов
- upload_max_filesize=2M - устанавливает максимальный объем загружаемых файлов
При копирования этой статьи ссылка на brupt.ru обязательна.