Загрузка файла на PHP

Вы уже запустили Веб-сервер?
Сейчас Вы познакомитесь с загрузкой файла из формы (<form>), а также загрузки значений других типов тэга <input>.

С тэгом <form> мы уже познакомились - "Формы для отправки данных. Тэг <form>".
С тэгом <input> мы также уже знакомы из урока - "Типы тэга <input>".

Берем наш стандартный шаблон:
Структура файлов сайта

В файл index.php прописываем следующий код (чтобы лучше запоминать и понимать код, не копируйте а пишите его вручную):
<HTML>
	<HEAD>
		<TITLE>Загрузка файла на PHP</TITLE>
		<link rel="stylesheet" type="text/css" href="css/style.css">
		<script src="js/jquery-2.1.3.min.js"></script>
		<script src="js/myscripts.js"></script>
	</HEAD>
	<BODY>
		<!--Наша форма, которая ссылается на скрипт "fileupload.php"-->
		<form name="fileupload" action="fileupload.php" enctype="multipart/form-data" method="POST">
			<!--Поля для ввода данных-->
			<input type="text" name="our_text">
			<br />
			<input type="file" name="our_file">
			<br />
			<input type="submit" value="Отправить данные!">
		<form>
	</BODY>
</HTML>

Если Вы послушали моего совета "Писать код в ручную", то могли заметить что наша форма отправляется на скрипт-обработчик с именем: "fileupload.php".
Создадим его в нашей папке рядом с файлом index.php. А также создадим папку "uploads", для сохранения в ней загруженных файлов.

Записываем код в файл fileupload.php.
<?
// Переменная с нашей папкой для файлов
$uploaddir = 'uploads/';
// Файл с директорией
$uploadfile = $uploaddir . $_FILES['our_file']['name'];
// Переменная со значением поля для ввода с именем "our_text"
$our_text = $_POST['our_text'];
// Выводим значение переменной
echo $our_text;
// Переносим строчку, чтобы значение поля "our_text" и информация о 
// загрузке файла не сливалась
echo '<br />';
if (move_uploaded_file($_FILES['our_file']['tmp_name'], $uploadfile)) {
    echo "Файл корректен и был успешно загружен.";
} else {
    echo "Файл не выбран!";
}
?>

Строка кода:
if (move_uploaded_file($_FILES['our_file']['tmp_name'], $uploadfile)) {

Означает условие "if", в котором проверяется, был ли файл выбран в поле <input> и отправлен скрипту - обработчику), и перемещен в папку "uploads".
Если все эти условия соблюдаются, то скрипт выводит сообщение: "Файл корректен и был успешно загружен."

Суперглобальный массив $_FILES


Для каждого загруженного файла, $_FILES содержит массив, со следующими данными:
  • $_FILES['userfile']['name'] - исходное имя файла, такое, каким его видел пользователь, выбирая файл;

  • $_FILES['userfile']['type'] - mime/type файла, к примеру, может быть image/gif; это поле полезно сохранить, если Вы хотите предоставлять интерфейс для скачивания загруженных файлов;

  • $_FILES['userfile']['size'] - размер загруженного файла;

  • $_FILES['userfile']['tmp_name'] - полный путь к временному файлу на диске;

  • $_FILES['userfile']['error'] - Начиная с версии 4.2.0, содержит код ошибки, который равен 0, если операция прошла успешно.

Коды ошибок массива $_FILES


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; Файл не был загружен.
UPLOAD_ERR_NO_TMP_DIR
Значение: 6; отсутствует временная папка.
UPLOAD_ERR_CANT_WRITE
Значение: 7; Не удалось записать файл на диск. Добавлено в PHP 5.1.0.
UPLOAD_ERR_EXTENSION
Значение: 8; PHP-расширение остановило загрузку файла. PHP не предоставляет способа определить какое расширение остановило загрузку файла; в этом может помочь просмотр списка загруженных расширений из phpinfo(). Добавлено в PHP 5.2.0.

Скачать коды урока