PHP中通过fopen()函数访问远程文件示例


Posted in PHP onNovember 18, 2014

使用PHP不仅可以让用户通过浏览器访问服务器端的文件,还可以通过HTTP或FTP等协议访问其他服务器中的文件,可以在大多数需要用文件名作为参数的函数中使用HTTP和FTP URL来代替文件名。使用fopen()函数将指定的文件名与资源绑定到一个流上,如果文件名是“scheme://…”的格式,则被当成一个URL,PHP将搜索协议处理器(也被成为封装协议)来处理此模式。

如果需要远程访问文件,必须在PHP的配置文件中激活“allow_url_fopen”选项,才能使用fopen()函数打开远程文件。而且还要确定其他服务器中的文件是否有访问权限,如果使用HTTP协议对远程文件进行连接,只能以“只读”模式打开。如果需要访问的远程FTP服务器中,对所提供的用户开启了“可写权限,则使用FTP协议连接远程文件时,就可以使用“只写”或“只读”模式打开文件。但不可以使用“可读可写”模式。

使用PHP访问远程文件就像访问本地文件一样,都是使用相同的读写函数处理。例如,可以用以下范例来打开远程Web服务器上的文件,解析我们需要的输出数据,然后就将这些数据用在数据库的检索中,或者简单地将其输出到网站剩下内容的样式匹配中。代码如下所示:

<?php

//通过http打开远程文件

$file = fopen(https://3water.com, "r") or die("打开远程文件失败!!");

while (!feof($file)){

    $line = fgets($file,1024);     //每读取一行

//如果找到远程文件中的标题标记则取出标题,并退出循环,不在读取文件

    if (preg_match("/<titile>(.*/)<\/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()函数对程序的运行时间加以限制。

PHP 相关文章推荐
PHP配置文件中最常用四个ini函数
Mar 19 PHP
php mssql 数据库分页SQL语句
Dec 16 PHP
php xml留言板 xml存储数据的简单例子
Aug 24 PHP
php date与gmdate的获取日期的区别
Feb 08 PHP
解决文件名解压后乱码的问题 将文件名进行转码的代码
Jan 10 PHP
CodeIgniter安全相关设置汇总
Jul 03 PHP
php中通过DirectoryIterator删除整个目录的方法
Mar 13 PHP
PHP的压缩函数实现:gzencode、gzdeflate和gzcompress的区别
Jan 27 PHP
php获取远程图片并下载保存到本地的方法分析
Oct 08 PHP
基于php流程控制语句和循环控制语句(讲解)
Oct 23 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
Dec 25 PHP
PHP 99乘法表的几种实现代码
Oct 13 PHP
PHP移动文件指针ftell()、fseek()、rewind()函数总结
Nov 18 #PHP
PHP文件锁函数flock()详细介绍
Nov 18 #PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
Nov 18 #PHP
PHP操作文件的一些基本函数使用示例
Nov 18 #PHP
一个经典的PHP文件上传类分享
Nov 18 #PHP
php数组查找函数总结
Nov 18 #PHP
一个经典的PHP验证码类分享
Nov 18 #PHP
You might like
《星际争霸》各版本雷兽特点图文解析 雷兽不同形态一览
2020/03/02 星际争霸
PHP原生函数一定好吗?
2014/12/08 PHP
Yii开启片段缓存的方法
2016/03/28 PHP
JS俄罗斯方块,包含完整的设计理念
2010/12/11 Javascript
jQuery+CSS 实现随滚动条增减的汽水瓶中的液体效果
2011/09/26 Javascript
js判断是否为数组的函数: isArray()
2011/10/30 Javascript
jQuery easyui datagrid动态查询数据实例讲解
2013/02/26 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
2013/08/12 Javascript
原生的html元素选择器类似jquery选择器
2014/10/15 Javascript
jQuery中clearQueue()方法用法实例
2014/12/29 Javascript
BootStrap 轮播插件(carousel)支持左右手势滑动的方法(三种)
2016/07/07 Javascript
深入浅出ES6新特性之函数默认参数和箭头函数
2016/08/01 Javascript
javascript 内置对象及常见API详细介绍
2016/11/01 Javascript
JavaScript的变量声明提升问题浅析(Hoisting)
2016/11/30 Javascript
nodejs个人博客开发第七步 后台登陆
2017/04/12 NodeJs
微信小程序 slider的简单实例
2017/04/19 Javascript
JS脚本实现网页自动秒杀点击
2018/01/11 Javascript
ajax前台后台跨域请求处理方式
2018/02/08 Javascript
JavaScript中import用法总结
2019/01/20 Javascript
微信小程序开发注意指南和优化实践(小结)
2019/06/21 Javascript
layui自定义验证,用ajax查询后台是否有重复数据,form.verify的例子
2019/09/06 Javascript
JS数组方法concat()用法实例分析
2020/01/18 Javascript
nuxt 每个页面head标签内容设置方式
2020/11/05 Javascript
Vue过滤器,生命周期函数和vue-resource简单介绍
2021/01/12 Vue.js
Python脚本处理空格的方法
2016/08/08 Python
django model去掉unique_together报错的解决方案
2016/10/18 Python
PyCharm代码格式调整方法
2018/05/23 Python
深入理解Django-Signals信号量
2019/02/19 Python
Python三元运算与lambda表达式实例解析
2019/11/30 Python
Python3 中sorted() 函数的用法
2020/03/24 Python
Python闭包装饰器使用方法汇总
2020/06/29 Python
赫里福德的一家乡村零售商店:Philip Morris & Son
2017/06/25 全球购物
New Balance波兰官方商城:始于1906年,百年慢跑品牌
2017/08/15 全球购物
Java软件工程师综合面试题笔试题
2013/09/08 面试题
安全教育日主题班会
2015/08/13 职场文书
如何用Python搭建gRPC服务
2021/06/30 Python