Базовые сведения:
Функция 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>"; ?>
Задания на лабораторную работу