执行、获取远程代码返回:file_get_contents 超时处理的问题详解


Posted in PHP onJune 25, 2013

天气终于晴了,但问题来了。在实现两个站点间用户数据同步,当使用php函数 file_get_contents抓取执行远程页面时,如果连接超时将会输出一个Fatal Error或相当的慢,结果导致下面的代码不能运行。先了解一下PHP file_get_contents() 函数
定义和用法
file_get_contents() 函数把整个文件读入一个字符串中。
和 file() 一样,不同的是 file_get_contents() 把文件读入一个字符串。
file_get_contents() 函数是用于将文件的内容读入到一个字符串中的首选方法。如果操作系统支持,还会使用内存映射技术来增强性能。
语法
file_get_contents(path,include_path,context,start,max_length)参数 描述
path 必需。规定要读取的文件。
include_path 可选。如果也想在 include_path 中搜寻文件的话,可以将该参数设为 "1"。
context 可选。规定文件句柄的环境。
context 是一套可以修改流的行为的选项。若使用 null,则忽略。
start 可选。规定在文件中开始读取的位置。该参数是 PHP 5.1 新加的。
max_length 可选。规定读取的字节数。该参数是 PHP 5.1 新加的。
说明
对 context 的支持是 PHP 5.0.0 添加的。
针对超时或页面过慢,一般可采取两个解决方案:

一. 利用file_get_contents()第三个参数

$url = "http://zhoz.com/zhoz.php";      
$ctx = stream_context_create(array(      
‘http' => array(‘timeout' => 10)      
    )      
    );      
$result = @file_get_contents($url, 0, $ctx);      
if($result){      
        var_dump($result);      
    }else{      
echo " Buffer is empty";      
    }      
?>  

此方法1,我经测试在本地反映良好,但如果在外网测试(环境:中国→美国服务器间)基本都是超时的情况。
测试了TimeOut基本没有用了,建议以下方式

二. 使用curl扩展库
$url = "http://zhoz.com/zhoz.php";      
try {      
echo date(‘Y-m-d h:i:s');      
echo "";      
//$buffer = file_get_contents($url);    
$buffer = zhoz_get_contents($url);      
echo date(‘Y-m-d h:i:s');      
if(emptyempty($buffer)) {      
echo " Buffer is empty";      
        } else {      
echo " Buffer is not empty";      
        }      
    } catch(Exception $e) {      
echo "error ";      
    }      
function zhoz_get_contents($url, $second = 5) {      
$ch = curl_init();      
        curl_setopt($ch,CURLOPT_URL,$url);      
        curl_setopt($ch,CURLOPT_HEADER,0);      
        curl_setopt($ch,CURLOPT_TIMEOUT,$second);      
        curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);      
$content = curl_exec($ch);      
        curl_close($ch);      
return $content;      
    }      
?>

综述,根据系统环境来选择到底应用哪种方法:
function vita_get_url_content($url) {   
if(function_exists(‘file_get_contents')) {   
$file_contents = file_get_contents($url);   
} else {   
$ch = curl_init();   
$timeout = 5;   
curl_setopt ($ch, CURLOPT_URL, $url);   
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);   
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);   
$file_contents = curl_exec($ch);   
curl_close($ch);   
}   
return $file_contents;   
}   
?> 
PHP 相关文章推荐
PHP学习 变量使用总结
Mar 24 PHP
PHP下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
Jun 09 PHP
详解PHP内置访问资源的超时时间 time_out file_get_contents read_file
Jun 03 PHP
jQuery+PHP+ajax实现微博加载更多内容列表功能
Jun 27 PHP
php自定义分页类完整实例
Dec 25 PHP
PHP实现搜索地理位置及计算两点地理位置间距离的实例
Jan 08 PHP
PHP获取页面执行时间的方法(推荐)
Dec 10 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
Feb 28 PHP
PHP实现求两个字符串最长公共子串的方法示例
Nov 17 PHP
PHP使用Curl实现模拟登录及抓取数据功能示例
Apr 27 PHP
YII框架常用技巧总结
Apr 27 PHP
PHP7 新增功能
Mar 09 PHP
PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
Jun 25 #PHP
使用php判断网页是否gzip压缩
Jun 25 #PHP
解析PHP中的file_get_contents获取远程页面乱码的问题
Jun 25 #PHP
深入file_get_contents函数抓取内容失败的原因分析
Jun 25 #PHP
提升PHP性能的21种方法介绍
Jun 25 #PHP
解析如何通过PHP函数获取当前运行的环境 来进行判断执行逻辑(小技巧)
Jun 25 #PHP
解析php取整的几种方式
Jun 25 #PHP
You might like
PHP读取zip文件的方法示例
2016/11/17 PHP
Laravel框架集合用法实例浅析
2020/05/14 PHP
JavaScript 判断浏览器类型及版本
2009/02/21 Javascript
关于document.cookie的使用javascript
2010/10/29 Javascript
Jquery实现三层遍历删除功能代码
2013/04/23 Javascript
javascript学习笔记(七)Ajax和Http状态码
2014/10/08 Javascript
jQuery使用之处理页面元素用法实例
2015/01/19 Javascript
基于jQuery实现仿搜狐辩论投票动画代码(附源码下载)
2016/02/18 Javascript
js点击返回跳转到指定页面实现过程
2020/08/20 Javascript
jQuery增加和删除表格项目及实现表格项目排序的方法
2016/05/30 Javascript
JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)
2016/06/02 Javascript
webpack构建换肤功能的思路详解
2017/11/27 Javascript
详解javascript函数写法大全
2019/03/25 Javascript
nodejs二进制与Buffer的介绍与使用
2019/07/11 NodeJs
JavaScript 实现同时选取多个时间段的方法
2019/10/17 Javascript
javascript用defineProperty实现简单的双向绑定方法
2020/04/03 Javascript
js实现mp3录音通过websocket实时传送+简易波形图效果
2020/06/12 Javascript
[02:04]2018DOTA2亚洲邀请赛Secret赛前采访
2018/04/03 DOTA
[03:12]完美世界DOTA2联赛PWL DAY9集锦
2020/11/10 DOTA
python中pycurl库的用法实例
2014/09/30 Python
基于Python_脚本CGI、特点、应用、开发环境(详解)
2017/05/23 Python
python中文乱码不着急,先看懂字节和字符
2017/12/20 Python
Sanic框架异常处理与中间件操作实例分析
2018/07/16 Python
关于pandas的离散化,面元划分详解
2019/11/22 Python
Python-jenkins模块之folder相关操作介绍
2020/05/12 Python
django正续或者倒序查库实例
2020/05/19 Python
阿玛瑞酒店中文官方网站:Amari.com
2018/02/13 全球购物
美国户外烹饪产品购物网站:Outdoor Cooking
2020/01/10 全球购物
什么是抽象
2015/12/13 面试题
咖啡厅创业计划书范本
2014/01/22 职场文书
中学生自我鉴定
2014/02/04 职场文书
社会实践先进工作者事迹材料
2014/05/06 职场文书
假面舞会策划方案
2014/05/29 职场文书
学校消防安全责任书
2014/07/23 职场文书
2016年教师节感言
2015/12/09 职场文书
python井字棋游戏实现人机对战
2022/04/28 Python