PHP-4 Эффективная работа


Интерфейс с файловой системой
Проверка отдельных характеристик файлов
Операции с содержимым файлов
Операции с конвейерами
Специальные и необычные функции

10.4.Операции с конвейерами

Кроме обычных файлов в UNIX, да и в MS-DOS тоже, есть такой интересный механизм, как «конвейер». Это средство потоковой обработки информации, поступающей непосредственно со стандартного выхода одной программы на вход другой. Нет ничего удивительного в том, что разработчики РНР также не обошли своим вниманием это средство.

10.4.1 . Закрытие конвейера: pclose

int pclose (int fp)

Закрывает указатель файла, связанный с конвейером, который открыт функцией рореп () (см. раздел 10.4.2) и соответственно завершает процесс. Возвращает код завершения процесса.

10.4.2. Открытие конвейера: рореn

int рореn (string command, string mode)

Функция открывает для обработки конвейер путем порождения дочернего процесса (системный вызов fork), выполняющего команду операционной системы, заданную аргументом command.

Функция возвращает указатель файла, идентичный результату вызова fopen() (раздел 10.3. 10), с тем отличием, что конвейер является однонаправленным, то есть может использоваться либо для чтения данных, либо для их записи. Созданный таким образом указатель файла должен закрываться с помощью вызова pclose () (см. раздел 10.4.1). Для работы с конвейером можно использовать стандартные функции работы с файлами: fgets() (раздел 10.3.6), fgetss() (раздел 10.3.7) и fputs () (раздел 10.3.12).

В случае возникновения ошибки функция возвращает false.

Вот как можно, например, извлечь для обработки список файлов текущего каталога:
$fp = рореп ("/bin/Is", "r");

10.5. Специальные и необычные функции

Специализация РНР как языка для генерации HTML-страниц нашла свое отражение и в составе функций, ориентированных на работу с файлами. В этом разделе мы рассмотрим необычные функции, которые предназначены для облегчения рутинных работ при построении WWW-серверов.

10.5.1. Создание символьной ссылки: link

int link (string target, string link)

Функция предназначена для создания жесткой символьной ссылки на файл. В Windows по вполне понятным причинам эта функция не работает.

См. также описание функции symlink() (раздел 10.5.7) для создания «мягких» ссылок, readlink () (раздел 10.5.4) и 1inkinfо() (раздел 10.5.2).

10.5.2. Извлечение информации о ссылке:linkinfo

int linkinfo (string path)

Функция 1inkinfо () возвращает содержимое поля st_dev структуры stat, сформированной системным вызовом UNIX Istat. Фактически эта функция используется для того, чтобы проверить правильность определения ссылки path, то есть указывает ли она на реально существующий файл или каталог.

В случае отсутствия реального файла функция возвращает false.

См. также описание symlink () (раздел 10.5.7), readl ink () (раздел 10.5.4) и 1inki nfо () (раздел 10.5.2).

10.5.3. Загрузка файла целиком: readfile

int readfile (string filename [, int use_include_path])

Функция выполняет чтение файла, заданного именем filename, и его вывод на устройство стандартного вывода. Возвращает размер файла в байтах. В случае ошибки возвращает false и выводит сообщение о причинах ошибки.

Если имя файла начинается с последовательности символов «http: //», производится открытие соединения с указанным сервером и считанная в результате соединения страница передается на устройство стандартного вывода.

Следует иметь в виду, что корректно обработать заголовки перенаправления запросов эта функция не может, поэтому при доступе к каталогам вы должны явно помещать в конец filename завершающую косую «/>.

Если имя файла начинается с последовательности символов «ftp: //», открывается FTP-соединение и загруженный файл копируется на устройство стандартного вывода. При этом если FTP-сервер не поддерживает пассивный режим работы, вызов функции завершается генерацией сообщения об ошибке.

И наконец, если имя файла не содержит в начале ни одну из упомянутых последовательностей, оно рассматривается как имя локального файла.

В случае если необязательный второй параметр установлен равным 1, поиск файла по имени будет осуществляться не только в текущем каталоге, но и в каталогах, перечисленных в конфигурационной переменной i nclude_path. См. также описание fpassthru() (раздел 10.3.11), file () (раздел 10.3.8), fopen() (раздел 10.3.10), include О (раздел 6.12), require О (раздел 6.11) и virtual() (раздел 15.3.6).

10.5.4. Выявление реального имени файла:readlink

string readlink (string path)

Функция read1ink () работает аналогично одноименному системному вызову UNIX и возвращает реальное имя файла, к которому производится обращение по символьной ссылке. Функция возвращает это имя или 0 — в случае возникновения ошибки.

примечание
       В Windows эта функция не работает.

См. также описание symlink () (раздел 10.5.7) и 1inki nfо () (раздел 10.5.2).

10.5.5. Информация о файле: stat

array stat (string filename)

Функция осуществляет сбор информации о файле. Возвращает массив, содержащий следующие элементы:

1. Устройство.
2. Inode.
3. Режим защиты inode.
4. Количество ссылок на данный файл.
5. UID владельца.
6. GID владельца.
7. Тип устройства.
8. Размер файла в байтах.
9. Метка времени последнего доступа к содержимому.
10. Метка времени последней модификации параметров файла.
11. Метка времени последнего изменения содержимого файла.
12. Размер блока при блоковом доступе к файлу.
13. Количество выделенных для хранения файла блоков.

В случае возникновения ошибки функция возвращает false.

С удаленными файлами эта функция не работает. Вы можете применять ее только к локальной файловой системе. Результаты работы функции кэшируются. Для обновления информации необходимо использовать вызов clearstatcache() (см. раздел 10.1.5).

10.5.6. Информация по символьной ссылке: Istat

array Istat (string filename)

Функция осуществляет сбор информации о файле. Функция в целом аналогична рассмотренной выше stat() (раздел 10.5.5), за исключением того, что если имя файла указывает на символьную ссылку, то возвращается информация именно по ссылке, а не по файлу, на который она ссылается. Возвращает массив, содержащий следующие элементы:

1. Устройство.
2. Inode.
3. Режим защиты inode.
4. Количество ссылок на данный файл.
5. UID владельца.
6. GID владельца.
7. Тип устройства.
8. Размер файла в байтах.
9. Метка времени последнего доступа к содержимому.
10. Метка времени последней модификации параметров файла.
11. Метка времени последнего изменения содержимого файла.
12. Размер блока при блоковом доступе к файлу.
13. Количество выделенных для хранения файла блоков.

В случае возникновения ошибки функция возвращает false. С удаленными файлами эта функция не работает. Вы можете применять ее только к локальной файловой системе. Результаты работы функции кэшируются. Для обновления информации необходимо использовать вызов clearstatcache() (раздел 10.1.5).

10.5.7. Создание символьной ссылки: symlink

int symlink (string target, string link)

Функция symlinkQ создает символьную ссылку для существующего файла (каталога).

примечание
       В Windows эта функция не работает.

См. также описание функции 1 i nk () (раздел 10.5.1), предназначенной для создания жестких ссылок, и функций readlink() (раздел 10.5.4) и linkinfo() (раздел 10.5.2).

10.5.8. Генерация уникального имени файла:tempnam

string tempnam (string dir, string prefix)

Функция генерирует уникальное имя временного файла в заданном каталоге. Если каталога с данным именем не существует, функция генерирует имя файла, принадлежащего каталогу, выделенному для размещения временных файлов.

Конкретный алгоритм работы функции, конечно же, зависит от особенностей операционной системы, на которой реализована PHP-машина. Так, при работе в Windows переменная окружения ТМР перекрывает значение аргумента dir, указанное при вызове функции, в Linux приоритет отдается переменной окружения

TMPDIR, а в SVR4 абсолютный приоритет отдается как раз аргументу dir. В целом же работа этой функции основана на системном вызове tempnam.

После завершения работы функция возвращает имя временного файла или пустую строку в случае невозможности его создания:
$tmpfname = tempnam ("/tmp", "FOO");
См. также описание tmpfile() (раздел 10.5.9).

10.5.9. Создание временного безымянного файла: tmpfile

int tmpfile ()

Функция создает временный файл с неким уникальным именем в режиме записи данных и возвращает указатель на него, аналогичный получаемому в результате вызова fopen () (см. раздел 10.3.10). При закрытии файла с помощью fclose() (раздел 10.3.1) он автоматически удаляется. То же самое происходит и при окончании работы программы.

См. также описание tempnam() (раздел 10.5.8).

10.5.10. Изменение маски файла: umask

int umask (int mask)

Функция umask () устанавливает маску PHP-машины равной mask & 0777и возвращает прежнее значение маски. В тех случаях, когда PHP-машина сконфигурирована как серверный модуль, значение маски устанавливается по завершении каждого запроса на работу с файлом.

Вызов функции без аргументов приводит к считыванию текущего значения маски.

примечание
       В Windows эта функция по вполне понятным причинам не работает. Но и в UNIX, прежде чем за нее хвататься, стоит взглянуть на описание системного вызова umask.

10.5.11. Удаление файла: unlink

int unlink (string filename)

Функция осуществляет удаление файла. Полностью эквивалентна системному вызову unlink().

внимание
       Дело в том, что в мире UNIX файл может быть зарегистрирован в системе под несколькими именами. Выполнение этой функции разрывает связь между inode-файлом и указан- ным при вызове функции именем. Если это была единственная (или последняя) связь, то файл действительно будет удален. Если же таких связей (они же ссылки) несколько, то станет недоступным только данное имя файла.
назад
далее

Сайт управляется системой uCoz