电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

执行、获取远程代码返回:file


发布日期:2023/2/2
 

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

利用file_get_contents()第三个参数

复制代码 代码如下:
$url = "
$ctx = stream_context_create(array(
‘http => array(‘timeout => )
)
);
$result = @file_get_contents($url $ctx);
if($result){
var_dump($result);
}else{
echo " Buffer is empty";
}
?>


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

使用curl扩展库

复制代码 代码如下:
$url = "
try {
echo date(‘Ymd h:i:s);
echo "";
//$buffer = file_get_contents($url);
$buffer = zhoz_get_contents($url);
echo date(‘Ymd 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 = ) {
$ch = curl_init();
curl_setopt($chCURLOPT_URL$url);
curl_setopt($chCURLOPT_HEADER);
curl_setopt($chCURLOPT_TIMEOUT$second);
curl_setopt($chCURLOPT_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 = ;
curl_setopt ($ch CURLOPT_URL $url);
curl_setopt ($ch CURLOPT_RETURNTRANSFER );
curl_setopt ($ch CURLOPT_CONNECTTIMEOUT $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);
}
return $file_contents;
}
?>

上一篇:深入解析fsockopen与pfsockopen的区别

下一篇:table标签的结构与合并单元格的实现方法