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