只要在 php.ini 中启用 allow_url_fopen,你就可以对大多数以文件名作为参数的函数使用 HTTP 和 FTP URL。此外,URL 可以与 include、include_once、require 和 require_once 语句一起使用(为此必须启用 allow_url_include)。有关 PHP 支持的协议的更多信息,请参见 支持的协议和封装器。
例如,你可以使用它在远程 Web 服务器上打开一个文件,解析输出以获取你想要的数据,然后在数据库查询中使用该数据,或者简单地以与网站其余部分匹配的样式输出它。
示例 #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() 调用将失败。
要以除“匿名”以外的用户身份连接,你需要在 URL 中指定用户名(以及可能的密码),例如 'ftp://user:[email protected]/path/to/file
'。(当文件需要基本身份验证时,你可以使用相同的语法通过 HTTP 访问它们。)
示例 #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()。