Базовые сведения:
Функция file_exists
Синтаксис:
bool file_exists (имя файла или директории)
Функция file_exist()
проверяет, существует ли файл или директория,
имя которой передано ей в качестве аргумента. Если директория или
файл в файловой системе сервера существует, то функция возвращает
TRUE, в противном случае – FALSE. Результат работы этой функции
кэшируется. Соответственно очистить кэш можно, как уже отмечалось,
с помощью функции clearstatcache()
. Для нелокальных файлов
использовать функцию file_exists()
нельзя.
<?php $filename = 'c:/users/files/my_file.html'; if (file_exists($filename)) { print "Файл <b>$filename</b> существует";} else { print "Файл <b>$filename</b> НЕ существует";} ?>
Функция is_writable
Если кроме проверки существования файла нужно
узнать еще, разрешено ли записывать информацию в этот файл,
следует использовать функцию is_writable()
или ее псевдоним –
функцию is_writeable()
.
Синтаксис:
bool is_writable (имя файла или директории)
Эта функция возвращает TRUE, если файл (или директория) существует
и доступен для записи. Доступ к файлу осуществляется под той
учетной записью пользователя, под которой работает сервер (чаще
всего это пользователь nobody или www). Результаты работы функции
is_writable
кэшируются.
Функция is_readable
Если кроме проверки существования файла нужно
узнать еще, разрешено ли читать информацию из него, нужно
использовать функцию is_readable()
.
Синтаксис:
bool is_readable (имя файла)
Эта функция работает подобно функции is_writable()
.
<?php $filename = 'c:/users/files/my_file.html'; if (is_readable($filename)) { print "Файл <b>$filename</b> существует и доступен для чтения";} else { print "Файл <b>$filename</b> НЕ существует или НЕ доступен для чтения";} ?>
Удаление файла
Для того чтобы удалить файл с
помощью языка PHP, нужно воспользоваться функцией unlink()
.
Синтаксис этой функции можно описать следующим образом:
bool unlink ( имя_файла)
Данная функция удаляет файл, имеющий имя
имя_файла
, возвращает TRUE в случае успеха этой операции и FALSE –
в случае ошибки. Чтобы удалить файл, нужно тоже иметь
соответствующие права доступа к нему (например, доступа только на
чтение для удаления файла недостаточно).
<?php $filename = 'c:/users/files/my_file.html'; unlink($filename); // удаляем файл с именем // c:/users/files/my_file.html ?>
Загрузка файла на сервер
Теперь решим более сложную и часто
возникающую на практике задачу загрузки файла на сервер. Первое,
что нужно сделать, чтобы загрузить файл на сервер, это создать
html-форму. Для того чтобы с помощью этой формы можно было
загружать файлы, она должна содержать атрибут enctype в теге form
со значением multipart/form-data
, а также элемент input
типа file
.
Заметим, что мы добавили в форме скрытое поле, которое содержит в себе максимальный допустимый размер загружаемого файла в байтах. При попытке загрузить файл, размер которого больше указанного в этом поле значения, будет зафиксирована ошибка.
Теперь нужно написать скрипт, который будет обрабатывать полученный файл.
Вся информация о загруженном на сервер файле содержится в
глобальном массиве $_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:\WINDOWS\TEMP\php49F.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']
может иметь пять значений:
upload_max_filesize
в файле настроек php.ini
MAX_FILE_SIZE
формы html
По умолчанию загруженные файлы сохраняются во временной директории
сервера, если другая директория не указана с помощью опции
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>"; ?>
Задания на лабораторную работу