Загрузка файлов на сервер через PHP
В создании эксклюзивных проектов иногда нужно загружать файлы пользователя (к примеру: документы, фото или видео, . ) на сервер. Для этого используется HTML тег input с атрибутом type=»file», а обработкой полученных файлов занимается PHP скрипт. PHP обработка файлов, которые загружаются через форму, работает через глобальный массив $_FILES:
Загрузка одного файла
Для отправки файла с формы используется метод POST, обязательно нужно добавить к тегу атрибут enctype=»multipart/form-data», который определяет способ кодирования отправляемых данных. HTML код отправки файла методом POST
PHP код Результат Значения массива $_FILES:
| $_FILES[‘filename’][‘name’] | Имя загружаемого файла в браузере |
| $_FILES[‘filename’][‘type’] | Mime-тип файла. Тип: изображение, музыка, текст, видео, архив и др. |
| $_FILES[‘filename’][‘size’] | Размер полученного файла в байтах . |
| $_FILES[‘filename’][‘tmp_name’] | Временное имя файла, под которым он сохранен на сервере |
| $_FILES[‘filename’][‘error’] | Код ошибки при загрузке файла |
Загрузка несколько файлов
Для загрузки нескольких файлов к тегу input type=»file» нужно добавить атрибут multiple, а полю name квадратные скобки. HTML код загрузки нескольких файлов
PHP код полученного массива $_FILES Результат
Указать максимальный размер загружаемого файла
Определить размер загружаемого файла можно добавив в форму скрытое поле input type=»hidden» name=»MAX_FILE_SIZE» value=»размер в байтах»: Пример указания максимального размера
В случае превышения размера файла $_FILES[‘filename’][‘error’] выдаст ошибку с кодом «2».
Коды ошибок загрузки файлов
При возникновении ошибок загрузки файла, в массиве $_FILES[‘file’][‘error’] будет содержатся её код. Значения кодов ошибок:
| Код | Константа | Описание |
|---|---|---|
| 0 | UPLOAD_ERR_OK | Ошибок не возникло, файл успешно загружен на сервер. |
| 1 | UPLOAD_ERR_INI_SIZE | Размер файла превысил максимально допустимый размер, который задан директивой upload_max_filesize |
| 2 | UPLOAD_ERR_FORM_SIZE | Размер загружаемого файла превысил значение MAX_FILE_SIZE, указанное в HTML-форме. |
| 3 | UPLOAD_ERR_PARTIAL | Загружаемый файл был получен только частично. |
| 4 | UPLOAD_ERR_NO_FILE | Файл не был загружен. |
| 6 | UPLOAD_ERR_NO_TMP_DIR | Отсутствует временная папка. |
| 7 | UPLOAD_ERR_CANT_WRITE | Не удалось записать файл на диск (возникает, когда на хостинге закончилось место). |
| 8 | UPLOAD_ERR_EXTENSION | PHP-расширение остановило загрузку файла. |
Настройки PHP
Обычно настройки загрузки файлов на хостинге вполне нормальные и не вызывают проблем, но есть исключения. Если не загружаются большие файлы, то скорее всего установлен лимит на размер загружаемого файла, ограничено время загрузки файла или ограничено количество одновременных загрузок. Посмотреть установленные значения можно с помощью PHP функции phpinfo() В php.ini:
В .htaccess:
Также рекомендуем прочитать статью о безопасной загрузке файлов на сервер, чтобы защитить ваш ресурс.
PHP | Загрузка файлов на сервер
В этом уроке рассмотрим основы загрузки файлов в PHP. Во-первых, ознакомимся с параметрами конфигурации PHP, которые должны быть установлены для успешной загрузки файлов на сервер. После этого разберём реальный пример загрузки файла.
Настройка параметров PHP
Существует множество различных настроек конфигурации PHP, которые нам следует сначала проверить для успешной загрузки файлов. В этом уроке мы рассмотрим некоторые параметры, которые важны для загрузки файлов PHP. Эти параметры можно настроить в файле php.ini.
Где находится php.ini?
Местонахождение файла php.ini зависит от операционной системы, на которой работает сервер вашего хостинг-провайдера. Чтобы узнать где находится php.ini выполним следующие шаги:
-
Создаем файл PHP, например, phpinfo.php и добавляем в него следующие строки:
Приведём фрагмент из установочного файла с некоторыми полезными значениями по умолчанию:
; Whether to allow HTTP file uploads. file_uploads = On ; Temporary directory for HTTP uploaded files. ; Will use system default if not set. ;upload_tmp_dir = ; Maximum allowed size for uploaded files. upload_max_filesize = 16M ; Maximum number of files that can be uploaded via a single request max_file_uploads = 20 ; Maximum size of POST data that PHP will accept. post_max_size = 20M
Установите значение директивы file_uploads на On , чтобы разрешить загрузку файлов.
Директория upload_tmp_dir устанавливает временный каталог, который будет использоваться для хранения загруженных на сервер файлов. Если вы не установите его, то будет использоваться системный временный каталог по умолчанию.
По умолчанию значение директивы upload_max_filesize установлено в 2M (два мегабайта), но вы можете переопределить этот параметр, используя файл .htaccess. Если вы получите сообщение об ошибке — file exceeds upload_max_filesize при попытке загрузить файл, то вам нужно увеличить это значение. В таком случае обязательно увеличьте post_max_size .
Файлы на сервер загружаются с помощью POST-запросов, поэтому значение директивы post_max_size должно быть больше, чем указано в директиве upload_max_filesize .
Директива max_file_uploads позволяет устанавливать максимальное количество файлов, которые могут быть загружены на сервер за один раз. По умолчанию это 20
Максимальный объем памяти, который может потреблять скрипт, указан в директиве memory_limit . Если у вас возникают проблемы при загрузке больших файлов, то нужно проверить, чтобы это значение было больше, чем указано в post_max_size .
Создание формы загрузки
Сделаем HTML-форму для загрузки файла на сервер:
Пример
Выберите изображение для загрузки:
Обратите внимание на правила, которых следует придерживаться для приведенной выше HTML-формы:
- Убедитесь, чтобы в форме для атрибута method было установлено значение «post»
- Для атрибута enctype установите значение «multipart/form-data» , оно позволяет загружать файлы с использованием метода POST. Кроме того, он гарантирует, что символы не кодируются при отправке формы.
Затем мы выводим поле файла, которое позволяет нам выбрать файл с компьютера:
Форма выше отправляет данные в файл-обработчик с именем «upload.php», который мы создадим дальше.
Создание сценария загрузки файла
Итак, создадим файл upload.php со следующим содержимым:
upload.php
else < echo "Файл не является изображением"; $uploadOk = 0; >> ?>
Рассмотрим объявленные переменные в сценарии PHP:
- $target_dir = «uploads/» — директория, в которую будет помещен загружаемый файл.
- $target_file — путь к загружаемому файлу
- $uploadOk = 1 — флаг, назначение которого будет объяснено ниже
- $imageFileType — расширения загружаемых файлов (в нижнем регистре)
Функция pathinfo() возвращает ассоциированный массив, содержащий информацию об имени, расширении и директории файла. Первым параметром мы передали $target_file (путь к загружаемому файлу), а вторым — PATHINFO_EXTENSION (расширение файла). С помощью функции strtolower() все буквенные символы расширеня переводим в нижний регистр.
При отправке файла на сервер он сначала загружается во временное место $_FILES[«fileToUpload»][«tmp_name»] , из которого затем с помощью функции move_uploaded_file() он перемещается в каталог сервера.
Является ли временный файл $_FILES[«fileToUpload»][«tmp_name»] изображением проверим с помощью функции getimagesize() , которая определит размер любого заданного, поддерживаемого изображения и вернет этот размер вместе с типом файла и текстовой строкой height/width , которую можно будет использовать внутри тега HTML , а также вернет соответствующий тип содержимого HTTP.
Примечание: Файлы будут загружены в каталог «uploads/», поэтому вам нужно создать его в каталоге, в котором находится файл «upload.php».
Проверка существования файла
Прежде, чем двигаться дальше, выполним проверку — существует ли уже файл в папке uploads . Если это так, то выводим сообщение об ошибке, а для переменной $uploadOk установим значение 0 :
// Проверка существования файла
if (file_exists($target_file)) echo «Извините, файл уже существует»;
$uploadOk = 0;
>
Ограничение размера файла
Все загружаемые файлы попадают в суперглобальную переменную $_FILES .
Массив $_FILES является двухмерным. Мы можем загрузить набор файлов, и каждый загруженный файл можно получить по ключу, который совпадает со значением атрибута name .
Так как элемент для загрузки файла на форме имеет name=’filename’ , то данный файл мы можем получить с помощью выражения $_FILES[‘filename’] .
У каждого объекта файла есть свои параметры, которые мы можем получить:
- $_FILES[‘file’][‘name’] : фактическое имя загруженного файла
- $_FILES[‘file’][‘type’] : MIME-тип загружаемого файла, например, image/jpeg
- $_FILES[‘file’][‘size’] : размер загружаемого файла в байтах
- $_FILES[‘file’][‘tmp_name’] : имя временного файла, сохраненного на сервере
- $_FILES[‘file’][‘error’] : код ошибки, связанной с загрузкой этого файла
Поле ввода файла в нашей HTML-форме называется fileToUpload .
Следующим шагом проверим размер файла. Если размер файла превышает 500 КБ, отобразим сообщение об ошибке, а для переменной $uploadOk установим значение 0 :
// Проверить размер файла
if ($_FILES[«fileToUpload»][«size»] > 500000) echo «Извините, ваш файл слишком велик»;
$uploadOk = 0;
>
Ограничение типа файла
Приведем код, который позволяет пользователям загружать только файлы с расширением JPG , JPEG , PNG и GIF . Все остальные типы файлов будут выдавать сообщение об ошибке, переменной $uploadOk установим значение 0 :
Полный скрипт загрузки файла
Пример
else < echo "Файл не является изображением."; $uploadOk = 0; >> // Проверка, существует ли уже файл if (file_exists($target_file)) < echo "Извините, файл уже существует"; $uploadOk = 0; >// Check file size if ($_FILES["fileToUpload"]["size"] > 500000) < echo "Sorry, your file is too large."; $uploadOk = 0; >// Разрешаем определенные расширения файлов if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" ) < echo "Разрешены только файлы JPG, JPEG, PNG и GIF"; $uploadOk = 0; >// Проверка, не установлено ли для $uploadOk значение 0 из-за ошибки if ($uploadOk == 0) < echo "К сожалению, ваш файл не был загружен"; // если все в порядке, поробуем загрузить файл >else < if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) < echo "Файл ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " был загружен"; >else < echo "К сожалению, при загрузке вашего файла произошла ошибка"; >> ?>
Как отмечалось выше, при отправке файла на сервер он сначала загружается во временное место, из которого затем с помощью функции move_uploaded_file() он перемещается в созданный нами каталог сервера (мы прописали его в файле php.ini).
Функция move_uploaded_file() принимает два параметра — путь к загруженному временному файлу и путь, куда надо поместить загруженный файл.
Функция move_uploaded_file() возвращает TRUE в случае успеха и будет выведено сообщение: «Файл имя_файла был загружен». Если $_FILES[«fileToUpload»][«tmp_name»] не является загруженным файлом, никаких действий не предпринимается и функция возвращает FALSE , а наш код выведет сообщение: «К сожалению, при загрузке вашего файла произошла ошибка».
Мы также используем функцию htmlspecialchars() для кодирования всех специальных символов HTML в отправленном нам файле.
Как загрузить файл в PHP (с примером)
В этой статье я расскажу об основах загрузки файлов в PHP. Во-первых, мы рассмотрим параметры конфигурации PHP, которые должны быть установлены для успешной загрузки файлов. После этого мы разработаем реальный пример загрузки файла.
Настройка параметров PHP
Существует несколько настроек конфигурации PHP, которые вам следует предварительно проверить для успешной загрузки файлов. В этом разделе мы рассмотрим все параметры, которые важны для загрузки файлов PHP. Эти параметры можно настроить в файле php.ini.
Если вы не знаете, где найти файл php.ini, вы можете использовать php_ini_loaded_file() , чтобы найти его. Просто создайте файл PHP на своем сервере со следующей строкой и откройте его из браузера.
echo php_ini_loaded_file(); ?>
Вот выдержка из установочного файла с некоторыми полезными значениями по умолчанию.
; Whether to allow HTTP file uploads.
file_uploads = On
; Temporary directory for HTTP uploaded files.
; Will use system default if not set.
;upload_tmp_dir =
; Maximum allowed size for uploaded files.
upload_max_filesize = 16M
; Maximum number of files that can be uploaded via a single request
max_file_uploads = 20
; Maximum size of POST data that PHP will accept.
post_max_size = 20M
max_input_time = 60
memory_limit = 128M
max_execution_time = 30
Ключевые настройки
file_uploads
Значение директивы file_uploads должно быть установлено на On , чтобы разрешить загрузку файлов. Значение по умолчанию для этой директивы — On .
upload_max_filesize
Директива upload_max_filesize позволяет вам настроить максимальный размер загруженного файла. По умолчанию он установлен в 2M (два мегабайта), и вы можете переопределить этот параметр, используя файл .htaccess. Два мегабайта не очень соответствуют сегодняшним стандартам, поэтому вам, возможно, придется это увеличить. Если вы получите сообщение об ошибке — file exceeds upload_max_filesize при попытке загрузить файл, вам необходимо увеличить это значение. Если вы это сделаете, обязательно увеличьте post_max_size (см. ниже).
upload_tmp_dir
Устанавливает временный каталог, который будет использоваться для хранения загруженных файлов. В большинстве случаев вам не нужно беспокоиться об этой настройке. Если вы не установите его, будет использоваться системный временный каталог по умолчанию.
post_max_size
Директива post_max_size позволяет настроить максимальный размер данных POST. Поскольку файлы загружаются с помощью POST-запросов, это значение должно быть больше, чем указано в директиве upload_max_filesize . Например, если ваш upload_max_filesize составляет 16M (16 мегабайт), вам может потребоваться установить post_max_size в 20M .
max_file_uploads
Это позволяет вам установить максимальное количество файлов, которые могут быть загружены за раз. По умолчанию 20 , разумное количество.
max_input_time
Это максимальное количество секунд, которое скрипту разрешено анализировать входные данные. Вы должны установить его на разумное значение, если вы имеете дело с большими загрузками файлов. 60 (60 секунд) является хорошим показателем для большинства приложений.
memory_limit
Директива memory_limit указывает максимальный объем памяти, который может потреблять скрипт. Если вы сталкиваетесь с проблемами при загрузке больших файлов, вам необходимо убедиться, что значение этой директивы больше, чем указано в директиве post_max_size . Значение по умолчанию — 128M (128 мегабайт), поэтому, если у вас нет очень больших post_max_size и upload_max_filesize , вам не нужно беспокоиться об этом.
max_execution_time
Это максимальное количество секунд, разрешенное для работы скрипта. Если вы сталкиваетесь с проблемами при загрузке больших файлов, вы можете рассмотреть возможность увеличения этого значения. 30 (30 секунд) должны хорошо работать для большинства приложений.
Теперь давайте построим реальный пример, чтобы продемонстрировать загрузку файлов в PHP.
Создание формы HTML
После того, как вы настроили параметры PHP, вы готовы испытать возможности загрузки файлов PHP.
В нашем репозитории GitHub есть пример кода, который я собираюсь обсудить в этой статье. Итак, если вы хотите следовать ему, загрузите его из GitHub.
Мы собираемся создать два файла PHP: index.php и upload.php. Файл index.php содержит код, который отвечает за отображение формы загрузки файла. С другой стороны, файл upload.php отвечает за загрузку файла на сервер.
Кроме того, файл будет загружен в каталог uploaded_files, поэтому вам нужно убедиться, что эта папка существует и доступна для записи пользователем web-server .
В этом разделе мы рассмотрим ключевые части файла index.php.
Давайте посмотрим на файл index.php на GitHub:
session_start();
PHP File Upload
if (isset($_SESSION['message']) && $_SESSION['message'])
printf('%s', $_SESSION['message']);
unset($_SESSION['message']);
method="POST" action="upload.php" enctype="multipart/form-data">
Upload a File:
type="file" name="uploadedFile" />
type="submit" name="uploadBtn" value="Upload" />
Хотя это может показаться типичной формой PHP, существует важное различие в значении атрибута enctype тега . Он должен быть установлен в multipart/form-data , так как форма содержит поле файла.
Атрибут enctype указывает тип кодировки, который должен использоваться при отправке формы, и он принимает одно из следующих трех значений:
- application/x-www-form-urlencoded : Это значение по умолчанию, когда вы не устанавливаете значение атрибута enctype явно. В этом случае символы кодируются перед отправкой на сервер. Если у вас нет поля файла в вашей форме, вы должны использовать это значение для атрибута enctype .
- multipart/form-data : Когда вы используете значение multipart/form-data для атрибута enctype , оно позволяет загружать файлы с использованием метода POST. Кроме того, он гарантирует, что символы не кодируются при отправке формы.
- text/plain : Обычно это не используется. С помощью этой настройки данные отправляются без кодирования.
Затем мы выводим поле файла, которое позволяет вам выбрать файл с вашего компьютера.
type="file" name="uploadedFile" />
Кроме того, мы отобразили сообщение в верхней части формы. Это сообщение показывает статус загрузки файла, и оно будет установлено в переменной сессии скриптом upload.php. Мы рассмотрим это в следующем разделе.
if (isset($_SESSION['message']) && $_SESSION['message'])
printf('%s', $_SESSION['message']);
unset($_SESSION['message']);
Итак, это был файл index.php. В следующем разделе мы рассмотрим, как обрабатывать загруженный файл на стороне сервера.
Логика загрузки
В предыдущем разделе мы создали форму HTML, которая отображается на стороне клиента и позволяет загружать файл с вашего компьютера. В этом разделе мы увидим серверную часть кода, которая позволяет обрабатывать загруженный файл.
Загрузите код из файла upload.php на GitHub. Мы рассмотрим важные части этого файла.
В файле upload.php мы проверили, действительно ли это валидный запрос POST.
if (isset($_POST['uploadBtn']) && $_POST['uploadBtn'] == 'Upload')
В PHP, когда файл загружается, суперглобальная переменная $_FILES заполняется всей информацией о загруженном файле. Она инициализируется как массив и может содержать следующую информацию для успешной загрузки файла.
- tmp_name : Временный путь, в который загружается файл, сохраняется в этой переменной.
- name : Фактическое имя файла сохраняется в этой переменной.
- size : Указывает размер загруженного файла в байтах.
- type : Содержит mime тип загруженного файла.
- error : Если во время загрузки файла была ошибка, эта переменная заполняется соответствующим сообщением об ошибке. В случае успешной загрузки файла она содержит значение 0, которое можно сравнить с помощью константы UPLOAD_ERR_OK .
После проверки запроса POST мы проверяем, что загрузка файла прошла успешно.
if (isset($_FILES['uploadedFile']) && $_FILES['uploadedFile']['error'] === UPLOAD_ERR_OK)
Вы можете видеть, что переменная $_FILES является многомерным массивом, первый элемент — это имя поля файла, а второй элемент содержит информацию о загруженном файле, как мы уже говорили выше.
Если загрузка файла прошла успешно, мы инициализируем несколько переменных с информацией о загруженном файле.
// get details of the uploaded file
$fileTmpPath = $_FILES['uploadedFile']['tmp_name'];
$fileName = $_FILES['uploadedFile']['name'];
$fileSize = $_FILES['uploadedFile']['size'];
$fileType = $_FILES['uploadedFile']['type'];
$fileNameCmps = explode(".", $fileName);
$fileExtension = strtolower(end($fileNameCmps));
В приведенном выше коде мы также выяснили расширение загруженного файла и сохранили его в переменной $fileExtension .
Поскольку загруженный файл может содержать пробелы и другие специальные символы, лучше очистить имя файла, и это именно то, что мы сделали в следующем шаге.
$newFileName = md5(time() . $fileName) . '.' . $fileExtension;
Важно, чтобы вы ограничивали тип файла, который может быть загружен на определенные расширения, и не разрешали все. Мы это сделали, проверив расширение загруженного файла с помощью набора расширений, который мы хотим разрешить для загрузки.
$allowedfileExtensions = array('jpg', 'gif', 'png', 'zip', 'txt', 'xls', 'doc');
if (in_array($fileExtension, $allowedfileExtensions))
Наконец, мы используем функцию move_uploaded_file для перемещения загруженного файла в определенное место по нашему выбору.
// directory in which the uploaded file will be moved
$uploadFileDir = './uploaded_files/';
$dest_path = $uploadFileDir . $newFileName;
if(move_uploaded_file($fileTmpPath, $dest_path))
$message ='File is successfully uploaded.';
else
$message = 'There was some error moving the file to upload directory. Please make sure the upload directory is writable by web server.';
Функция move_uploaded_file принимает два аргумента. Первым аргументом является имя файла загруженного файла, а второй аргумент — путь назначения, в который вы хотите переместить файл.
Наконец, мы перенаправляем пользователя в файл index.php. Кроме того, мы устанавливаем соответствующее сообщение в переменной сессии, которое будет отображаться пользователям после перенаправления в файле index.php.
Как это все работает вместе
Не забудьте создать каталог uploaded_files и сделать его доступным для записи пользователем web-server. Затем перейдите и запустите файл index.php, который должен отобразить форму загрузки файла, которая выглядит так:

Нажмите кнопку Browse, чтобы открыть диалоговое окно, которое позволяет вам выбрать файл с вашего компьютера. Выберите файл с одним из расширений, разрешенным в нашем скрипте, и нажмите кнопку Загрузить.
Это должно отправить форму, и если все будет хорошо, вы должны увидеть загруженный файл в каталоге uploaded_files. Вы также можете попробовать загрузить другие файлы с расширениями, которые не разрешены, и проверить, предотвращает ли наш скрипт такие загрузки.
Заключение
Сегодня мы обсудили основы загрузки файлов на PHP. В первой половине статьи мы рассмотрели различные параметры конфигурации, которые должны быть установлены для загрузки файлов на работу. Затем мы рассмотрели реальный пример, который продемонстрировал, как загрузка файлов работает на PHP.
Надеюсь, вам понравилась эта статья, и вы можете свободно размещать свои вопросы и предложения ниже!
PHP и загрузка файлов
Загрузка документов и файлов на сайт для рядового пользователя – весьма распространенная задача. С ней сталкивался чуть ли не каждый. Реализуется через специальную форму. Подобные операции преследуют юзера повсеместно: в социальных сетях, на видео-хостингах, а также в виде файлообменников. Но для разработчика подобные манипуляции выглядят несколько иначе.
Данная статья расскажет о том, как на PHP загрузить файлы на сервер. Именно такой подход чаще всего реализован на веб-ресурсах.
Элементарное решение
PHP скрипт для заливания файла на сервер создать способен каждый. Справиться с поставленной задачей удается несколькими способами. Форма может быть «простой» или «сложной».
Первый вариант предусматривает создание такого «окна»:
Basic File Upload Basic File Upload
Это – HTML, в котором находится поле file input. Для того, чтобы файл можно было загрузить на сервер через PHP, потребуется выполнить такие действия:
- Создать форму «заливания». Код можно скопировать выше.
- Разместить полученный HTML в basic.php.
- Добавить строчку в тег «enctype=”multipart/form-data».
- Создать скрипт формы загрузки. Речь идет о PHP Script. Для этого потребуется $_FILES. Начать с формы, которая будет проверять, загрузил ли юзер документ.

- Создать полный скрипт для заливания документации на сервер, используя PHP move uploaded file.

Теперь скрипт должен работать. Не рекомендуется использовать его на собственном сервере. Исключение – если он тоже «тестовый». Это – лишь наглядный пример того, как через PHP и его функции можно скачивать документы и заливать их на серверы.
В чем заключается проблема
Представленные выше кодификации – это лишь шаблоны, на которые можно опираться при изучении принципов загрузки файлов через скрипты. Они не отвечают установленным принципам безопасности, поэтому подходят только в виде примеров.
Предложенные ранее коды помогают загружать файл любого типа на server. Это значит, что каждый хакер сможет при желании запустить собственные PHP-скрипты, чтобы позже осуществить взлом сайта. Это определенные риски. Поэтому необходимо защищать собственные servers после создания формы «заливания» документации.
О глобальной переменной
$_FILES – элемент, который успешно используется для поставленной изначально задачи. Разобравшись с ним, можно успешно проверить факт загрузки файла на сервер сайта.
$_FILES – глобальная переменная PHP, которая напоминает $_POST и $_GET. Это – ассоциативный массив, в котором располагается информация о загруженном документе. Для этого применяется method HTTP POST.
Если в процессе выполнить print_r($_FILES), в ходе обработки ранее предложенного шаблона будет выведена следующая информация:
Array ( [inputfile] => Array ( [name] => upload-file-php.jpg [type] => image/jpeg [tmp_name] => /Applications/XAMPP/xamppfiles/temp/phpcQiYhh [error] => 0 [size] => 6887 ) )
Для каждого input_type=”file” name=’inputfile’ в массиве будет создаваться элемент. При создании , имя компонента будет скорректировано на «тест» на английском. Вот пример кода:

А для того, чтобы полноценно применять input file, система создаст для перемещаемых через move uploaded file PHP несколько элементов. Их стоит рассмотреть поближе.
Элементы для input files
Когда на сервер загружаются файлы, для них создаются несколько файлов:
Каждый предусматривает собственные особенности, о которых должен знать разработчик. Рекомендуется запомнить следующие сведения:
- Name отвечает за название загруженного юзером файла. Включает в себя также формат документации.
- Type – тип загруженного файла или mime-type. При загрузке текста получается значение text/plain, картинки – image/jpeg или /png. Каждый тип файла имеет собственный mime-тип.
- Tmp_name – место временного хранения загруженного документа. Пусть подлежит возможности корректировки. Делается это путем изменения в переменной upload_tmp_dir. Обнаружить ее можно в файле php. Ini.
- Error. Отвечает за информацию об ошибке. Указывает на ее тип. Отображает сбои, возникающие при попытке загрузки документации. Пример – размер файла превышает максимально допустимый. Каждая error имеет собственный код – числовое значение и константу.
В случае с size все просто – это размер документа, который нужно залить на сервер PHP. Параметр указывается в байтах.
А что там про ошибки
Проверка на errors – важный момент всей операции. Если в процессе заливания файла на server возникли неполадки, документ может вовсе не появиться на сайте. Вот несколько самых распространенных «сбоев», которые могут быть выведены на экран:
- Upload_err_form_size (значение 2) – размер документа превышает установленное в переменной формы max_file_size значение.
- Ini_size (значение 1) – размер больше, чем предусматривает переменная upload_max_filesize в php.imi.
- Err_ok (значение 0) – успешная загрузка файла. Ошибок в процессе не обнаружено.
- _partial (значение 3) – неполная загрузка файла.
- No_file (значение 4) – документ для скачивания на сервер отсутствует.
- No_tmp_dir (значение 6) – указанной директории для временного хранения файла не обнаружено.
- Cant_write (значение 7) – записать файл на диск невозможно.
Этого новичкам будет достаточно в плане изучения ошибок. Но для полноценного заливания документации на server предстоит выучить одну полезную функцию.
Функция перемещения – кратко о главном
Move_uploaded_file – это функция, которая отвечает за перемещение загруженного файла из временной директории в ту или иную папку. Перед этим PHP будет проверять, был ли загружен документ в HTTP-методе post.
If файл перемещен без ошибок, на экране можно будет увидеть true или false. Предложенный ранее пример имел следующую строку:

Ее можно представить более красиво:
if(move_uploaded_file($_FILES['inputfile']['tmp_name'], $destiation_dir )) < echo "File Uploaded" >else
Как и ранее, данный вариант выступает лишь наглядным шаблоном.
Корректировка лимитов размеров
Размер загружаемого файла – параметр, который можно менять. Без него обойтись проблематично. Он обязателен для того, чтобы форма загрузки файла в PHP работала корректно и ограничивала юзеров. Иначе можно столкнуться с быстрой перегрузкой сервера – посетители будут заливать весьма увесистые документы.
Ограничения могут быть выставлены несколькими способами:
- В файле php.ini хранится переменная uload_max_filesize. Она отвечает за предельный размер заливаемых документов. Через знак равенства в соответствующем файле требуется указать интересующую характеристику.
- Ограничение устанавливается за счет помещения скрытого элемента ввода под названием upload_err_ini_size в форму загрузки. Пример – прописать .
- Если загружаемый файл больше, пользователь увидит «значение «2» в переменной $_FILES. Стоит обратить внимание на то, что upload_max_filesize не должен быть больше переменной post_max_size в php.ini.
Для того, чтобы откорректировать filesize в большую сторону на значимое значение, нужно просто изменить время исполнения php-скрипта.
Вопрос безопасности
Ранее было сказано о том, что предложенный пример кода на PHP не соответствует параметрам безопасности. Защищать загрузчик нужно каждому разработчику.
Далее для работы используем jpeg-документы размером более 1 МБ. Скачать их на сервер не получится, если выставить соответствующие ограничения. Они прописываются в переменной upload_max_filesize документа php.ini.

Выше представленный код form action предусматривает упомянутое ранее ограничение. За счет него получится настраивать принципы работы загрузчика.
Мультизагрузка
PHP-скрипты позволяют осуществлять мультизагрузку. Ее можно реализовать несколькими способами:
- Через имя файла input. Соответствующие «названия» должны быть разными.
- Привлекая массив. В этой ситуации input могут иметь одни и те же имена.
Все зависит от личных предпочтений разработчика. Первый вариант позволяет загружать несколько документов через элементы ввода. Если создается то или иное количество элементов input, в $_FILES создаются определенные «ключевые» компоненты. Вот наглядный пример:

$_FILES будет выглядеть массивом:

А вот PHP move uploaded file, при помощи которого файл загрузится на сервер. Здесь нужно учитывать, что один элемент предназначается для авы (картинка), другой – для резюме (файл в формате .doc).

А теперь стоит рассмотреть второй вариант – с одним полем input, но с массивами. Для uploaded file PHP можно задействовать массив с input type, прописанным в php:

Для ранее рассмотренного HTML $_Files будет обладать такую структуру:

Готов к работе или требует доработки
Коды, рассмотренные в примере – это шаблоны. Они готовы к работе, хоть и примитивны. Для нормального функционирования оные требуют расширения:
- удаления символов и пробелов из названия;
- занесения информации в БД для дальнейшей обработки;
- проверки размера файлов;
- сжатия изображений и картинок.
Теперь понятно, что собой представляет php _files tmp_name и как создавать формы для загрузки документации на серверы. А чтобы такие слова как server, value и submit не вызывали лишних вопросов, рекомендуется пройти курсы по PHP и серверной работы. Дистанционные занятия с выдачей сертификата в конце обучения – лучший способ быстро освоиться в любой сфере разработки программного обеспечения.
