Курс "Язык программирования PHP"
Шрифт:
?>
В результате на экран будет выведено следующее сообщение:
1: <b>Тише едешь - дальше будешь</b>
Функция file_get_contents
В версиях PHP начиная с 4.3 появилась возможность считывать содержимое файла в строку. Делается это с помощью функции file_get_contents. Как и две предыдущие функции, в качестве параметров она принимает значение имени файла и, возможно, указание искать его в директориях include_path.
Эта функция абсолютно идентична функции file, только возвращает она содержимое файла в виде строки. Кроме того, она безопасна для обработки бинарных данных и может считывать информацию из удаленных файлов, если это не запрещено настройками сервера.
Проверка существования файла
Итак, создавать файл мы научились, записывать данные в него - научились, считывать данные из файла - тоже научились. Но вот вопрос: а что если файла, с которым мы пытаемся проделать все эти операции, не существует? Или он недоступен для чтения или записи? Очевидно, что в таком случае ни одна из изученных нами функций работать не будет и PHP выдаст сообщение об ошибке. Чтобы отслеживать такого рода ошибки, можно использовать функции file_exists, is_writable, is_readable.
Функция file_exists
Синтаксис:
Функция file_exists проверяет, существует ли файл или директория, имя которой передано ей в качестве аргумента. Если директория или файл в файловой системе сервера существует, то функция возвращает TRUE, в противном случае - FALSE. Результат работы этой функции кэшируется. Соответственно очистить кэш можно, как уже отмечалось, с помощью функции clearstatcache. Для нелокальных файлов использовать функцию file_exists нельзя.
?>
Функция is_writable
Если кроме проверки существования файла нужно узнать еще, разрешено ли записывать информацию в этот файл, следует использовать функцию is_writable или ее псевдоним - функцию is_writeable.
Синтаксис:
Эта функция возвращает TRUE, если файл (или директория) существует и доступен для записи. Доступ к файлу осуществляется под той учетной записью пользователя, под которой работает сервер (чаще всего это пользователь nobody или www). Результаты работы функции is_writable кэшируются.
Функция is_readable
Если кроме проверки существования файла нужно узнать еще, разрешено ли читать информацию из него, нужно использовать функцию is_readable.
Синтаксис:
Эта функция работает подобно функции is_writable.
?>
Удаление файла
Последнее, что мы хотим изучить из действий над файлами, - это удаление файлов. Для того чтобы удалить файл с помощью языка PHP, нужно воспользоваться функцией unlink. Синтаксис этой функции можно описать следующим образом:
bool unlink ( имя_файла)
Данная функция удаляет файл, имеющий имя имя_файла, возвращает TRUE в случае успеха этой операции и FALSE - в случае ошибки. Чтобы удалить файл, нужно тоже иметь соответствующие права доступа к нему (например, доступа только на чтение для удаления файла недостаточно).
?>
Загрузка файла на сервер
Теперь решим более сложную и часто возникающую на практике задачу загрузки файла на сервер. Первое, что нужно сделать, чтобы загрузить файл на сервер, это создать html-форму. Для того чтобы с помощью этой формы можно было загружать файлы, она должна содержать атрибут enctype в теге form со значением multipart/form-data, а также элемент input типа file.
Пример 9.11.
</form>
Заметим, что мы добавили в форме скрытое поле, которое содержит в себе максимальный допустимый размер загружаемого файла в байтах. При попытке загрузить файл, размер которого больше указанного в этом поле значения, будет зафиксирована ошибка. В браузере созданная нами форма будет выглядеть как строка для ввода текста с дополнительной кнопкой для выбора файла с локального диска (рис 9.1).
Теперь нужно написать скрипт, который будет обрабатывать полученный файл.
Вся информация о загруженном на сервер файле содержится в глобальном массиве $_FILES. Этот массив появился начиная с PHP 4.1.0. Если включена директива register_globals, то значения переданных переменных доступны просто по их именам.
Если мы загрузили с компьютера-клиента файл с именем critics.htm размером 15136 байт, то скрипт с единственной командой print_r($_FILES); выведет на экран следующее: