Вся информация о загруженном на сервер файле содержится в глобальном массиве $_FILES. Этот массив появился начиная с PHP 4.1.0. Если включена директива register_globals, то значения переданных переменных доступны просто по их именам.
Если мы загрузили с компьютера-клиента файл с именем critics.htm размером 15136 байт, то скрипт с единственной командой print_r($_FILES); выведет на экран следующее:
Array ( [myfile] =>
Array ( [name] => critics.htm
[type] => text/html
[tmp_name] => C:WINDOWSTEMPphp49F.tmp
[error] => 0
[size] => 15136
)
)
Вообще говоря, массив $_FILES всегда имеет следующие элементы:
- $_FILES['myfile']['name'] - имя, которое имел файл на машине клиента.
- $_FILES['myfile']['type'] - mime-тип отправленного файла, если браузер предоставил эту информацию. В нашем примере это text/html.
- $_FILES['myfile']['size'] - размер загруженного файла в байтах.
- $_FILES['myfile']['tmp_name'] - временное имя файла, под которым он был сохранен на сервере.
- $_FILES['myfile']['error'] - код ошибки, появившейся при загрузке.
Здесь 'myfile' - это имя элемента формы, с помощью которого была произведена загрузка файла на сервер. То есть оно может быть другим, если элемент формы назвать иначе. Но вот другие ключи (name, type и т. д.) остаются неизменными для любой формы.
Если register_globals=On, то доступны также дополнительные переменные, такие как $myfile_name, которая эквивалентна $_FILES['myfile']['name'], и т.п.
Ошибок при загрузке в PHP выделяют пять типов и соответственно $_FILES['myfile']['error'] может иметь пять значений:
0 - ошибки не произошло, файл загружен успешно
1 - загружаемый файл превышает размер, установленный директивой upload_max_filesize в файле настроек php.ini
2 - загружаемый файл превышает размер, установленный элементом MAX_FILE_SIZE формы html
3 - файл был загружен частично
4 - файл загружен не был
По умолчанию загруженные файлы сохраняются во временной директории сервера, если другая директория не указана с помощью опции upload_tmp_dir в файле настроек php.ini. Переместить загруженный файл в нужную директорию можно с помощью функции move_uploaded_file().
Функция move_uploaded_file() имеет следующий синтаксис:
bool move_uploaded_file (временное_имя_файла,
место_назначения )
Эта функция проверяет, действительно ли файл, обозначенный строкой временное_имя_файла, был загружен через механизм загрузки HTTP методом POST. Если это так, то файл перемещается в файл, заданный параметром место_назначения (этот параметр содержит как путь к новой директории для хранения, так и новое имя файла).
Если временное_имя_файла задает неправильный загруженный файл, то никаких действий произведено не будет, и move_uploaded_file() вернет FALSE. То же самое произойдет, если файл по каким-то причинам не может быть перемещен. В этом случае интерпретатор выведет соответствующее предупреждение. Если файл, заданный параметром место_назначения, существует, то функция move_uploaded_file() перезапишет его.
<?
/* В версиях PHP, более ранних,
чем 4.1.0, вместо массива
$_FILES нужно использовать
массив $HTTP_POST_FILES */
$uploaddir = 'c:/uploads/';
// будем сохранять загружаемые
// файлы в эту директорию
$destination = $uploaddir .
$_FILES['myfile']['name'];
// имя файла оставим неизменным
print '<pre>';
if (move_uploaded_file(
$_FILES['myfile']['tmp_name'],
$destination)) {
/* перемещаем файл из временной папки
в выбранную директорию для хранения */
print 'Файл успешно загружен <br>';
} else {
echo 'Произошла ошибка при загрузке файла.
Некоторая отладочная информация:<br>';
print_r($_FILES);
}
print '</pre>';
?>
Заключение
Подведем итоги. В этой лекции мы изучили, как создавать файлы с помощью языка PHP, как записывать