В случае, если опция allow_url_fopen включена
в конфигурационном файле php.ini, вы можете использовать
HTTP и FTP ссылки в большинстве функций, принимающих в качестве
параметра имя файла. Также вы можете использовать ссылки в операторах
include(), include_once(),
require() и require_once().
Дополнительную информацию о поддерживаемых в PHP протоколах вы можете
найти в Прил. M.
Замечание:
В 4.0.3 и более ранних версиях при сборке необходимо использовать опцию
--enable-url-fopen-wrapper для активации возможности работать
с удаленными файлами.
Например, вы можете использовать это для того, чтобы открыть файл на
удаленном сервере, извлечь необходимые вам данные и использовать их
в запросе к базе данных или же просто отобразить их в дизайне вашего сайта.
Пример 39-1. Получение заголовка удаленной страницы
<?php $file = fopen ("http://www.example.com/", "r"); if (!$file) { echo "<p>Unable to open remote file.\n"; exit; } while (!feof ($file)) { $line = fgets ($file, 1024); /* Сработает, только если заголовок и сопутствующие теги расположены в одной строке */ if (eregi ("<title>(.*)</title>", $line, $out)) { $title = $out[1]; break; } } fclose($file); ?>
|
|
Вы также можете работать с удаленными файлами, расположенными на FTP-сервере
(подразумевается, что вы авторизировались с необходимыми для этого
привилегиями). Таким образом вы можете создавать новые файлы, но
попытка перезаписать существующий файл при помощи функции fopen()
приведет к ошибке.
Для того, что бы авторизироваться под пользователем, отличным от 'anonymous',
вам необходимо указать логин (и, возможно, пароль) в адресной строке, например
так: 'ftp://user:password@ftp.example.com/path/to/file'. (Вы можете
использовать этот же синтаксис для доступа к удаленным файлам по HTTP-протоколу,
если необходима Basic-авторизация.)
Пример 39-2. Сохранение данных на удаленном сервере
<?php $file = fopen ("ftp://ftp.example.com/incoming/outputfile", "w"); if (!$file) { echo "<p>Unable to open remote file for writing.\n"; exit; } /* Запись данных. */ fputs ($file, $_SERVER['HTTP_USER_AGENT'] . "\n"); fclose ($file); ?>
|
|
Замечание:
Глядя на приведенный выше пример, у вас может возникнуть идея
использовать эту технику для ведения удаленного лог-файла. К сожалению,
это не реализуемо, поскольку попытка записи в уже существующий
удаленный файл при помощи функции fopen()
приведет к ошибке. В реализации распределенного логирования, возможно, вам поможет
функция syslog().