只要在 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()。