使用 PHP 不仅可以让用户通过浏览器访问服务器端的文件, 还可以通过 HTTP 或 FTP 等协议访问其他服务器中的文件, 可以在大多数需要用文件名作为参数的函数中使用 HTTP 和 FTP URL 来代替文件名使用 fopen()函数将指定的文件名与资源绑定到一个流上, 如果文件名是 scheme:// 的格式, 则被当成一个 URL,PHP 将搜索协议处理器 (也被成为封装协议) 来处理此模式
如果需要远程访问文件, 必须在 PHP 的配置文件中激活 allow_url_fopen 选项, 才能使用 fopen()函数打开远程文件而且还要确定其他服务器中的文件是否有访问权限, 如果使用 HTTP 协议对远程文件进行连接, 只能以只读模式打开如果需要访问的远程 FTP 服务器中, 对所提供的用户开启了可写权限, 则使用 FTP 协议连接远程文件时, 就可以使用只写或只读模式打开文件但不可以使用可读可写模式
使用 PHP 访问远程文件就像访问本地文件一样, 都是使用相同的读写函数处理例如, 可以用以下范例来打开远程 web 服务器上的文件, 解析我们需要的输出数据, 然后就将这些数据用在数据库的检索中, 或者简单地将其输出到网站剩下内容的样式匹配中代码如下所示:
代码如下:
- <?php
- // 通过 http 打开远程文件
- $file = fopen(http://www.jb51.net, "r") or die("打开远程文件失败!!");
- while (!feof($file)){
- $line = fgets($file,1024); // 每读取一行
- // 如果找到远程文件中的标题标记则取出标题, 并退出循环, 不在读取文件
- if (preg_match("/(.*/)<\/title>",$line,$out)){ // 使用正则匹配标题标记
- $title = $out[1]; // 将标题标记中的标题字符取出
- break; // 退出循环, 结束远程文件读取
- }
- }
- fclose($file);
- echo $title;
- ?>
如果有合法的访问权限, 可以以一个用户的身份和某 FTP 服务器建立连接, 这样就可以向该 FTP 服务器端的文件进行写操作了可以用该技术来存储远程日志文件等操作, 但仅能用该方法来创建新的文件, 如果尝试覆盖已经存在的文件, fopen()函数的调用将会失败而且要以匿名 (anonymous) 以外的用户名连接服务器, 并需要指明用户名(甚至密码), 例如 ftp://user:password@ftp.lampbrother.net/path/to/file 代码如下所示:
代码如下:
- <?php
- // 在 ftp.lampbrother.net 的远程服务器上创建文件, 以写的模式打开
- file = fopen("ftp://user:password@ftp.lapbrother.net/path/to/file", "w");
- // 将一个字符串写入到远程文件中去
- fwrite($file, "Linux+Apache+MySQL+PHP");
- fclose($file);
- ?>
为了避免由于访问远程主机时发生的超时错误, 可以使用 set_time_limit()函数对程序的运行时间加以限制
来源: https://www.php1.cn/detail/php-6bb8fd8720.html