PHP 开发者大会 日本 2024

使用远程文件

只要在 php.ini 中启用了 allow_url_fopen,就可以将 HTTPFTP URL 与大多数以文件名作为参数的函数一起使用。此外,URL 可以与 includeinclude_oncerequirerequire_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()

添加注释

用户贡献的注释

此页面没有用户贡献的注释。
To Top