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

2015-01-24信息快讯网

本篇文章是对执行、获取远程代码返回:file_get_contents 超时处理的问题进行了详细的分析介绍,需要的朋友参考下

天气终于晴了,但问题来了。在实现两个站点间用户数据同步,当使用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判断是否为json格式的方法
PHP中session变量的销毁
php中session退出登陆问题
php中require和require_once的区别说明
php把session写入数据库示例
php跨域cookie共享使用方法
php中sprintf与printf函数用法区别解析
PHP json_decode函数详细解析
php的sprintf函数的用法 控制浮点数格式
PHP COOKIE及时生效的方法介绍
php中的filesystem文件系统函数介绍及使用示例
codeigniter教程之上传视频并使用ffmpeg转flv示例
codeigniter教程之多文件上传使用示例
php创建sprite
PHP下获取上个月、下个月、本月的日期(strtotime,date)
分享下页面关键字抓取components.arrow.com站点代码
windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)
ubuntu12.04使用c编写php扩展模块教程分享
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
解析PHP中的file_get_contents获取远程页面乱码的问题
深入file_get_contents函数抓取内容失败的原因分析
关于PHP session 存储方式的详细介绍
基于php使用memcache存储session的详解
解析centos中Apache、php、mysql 默认安装路径
探讨:如何使用PhpDocumentor生成文档
关于PHPDocument 代码注释规范的总结
解析Ubuntu下crontab命令的用法
基于PHP magic_quotes_gpc的使用方法详解
解析php中用PHPMailer来发送邮件的示例(126.com的例子)
关于file_get_contents返回为空或函数不可用的解决方案
关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
©2014-2024 dbsqp.com