PHP-windows下nginx网站无法运行get_file_content?

PHP-windows下nginx网站无法运行get_file_content?

瑾兮 发布于 2017-05-25 字数 315 浏览 1237 回复 2

这几天天天被攻击,httpd.exe占用CPU总是99%,还好给我点面子,没有到100%,网站就打不开了。听别人说nginx很好,就想在服务器上使用一下。配置过程不说,直接说问题。

问题是:我有个页面,里面就一句代码

<?php
echo file_get_contents("http://www.xxxx.com/formguide/index.php?formid=1");
?>

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夜无邪 2017-10-13 2 楼

给你的get_file_content设置一下超时时间,大家都知道在 php.ini 中,有一个参数 max_execution_time 可以设置 PHP 脚本的最大执行时间,但是,在 php-cgi(php-fpm) 中,该参数不会起效。真正能够控制 PHP 脚本最大执行时间的是 php-fpm.conf 配置文件中的以下参数:

 The timeout (in seconds) for serving a single request after which the worker process will be terminated
Should be used when 'max_execution_time' ini option does not stop script execution for some reason
'0s' means 'off'
<value name="request_terminate_timeout">0s</value>

你可以尝试一下给它加个超时时间:

 <?php
$ctx = stream_context_create(array(
'http' => array(
'timeout' => 1 //设置一个超时时间,单位为秒
)
)
);
file_get_contents("http://example.com/", 0, $ctx);
?>

参考:PHP-CGI 进程 CPU 100% 与 file_get_contents 函数的关系

晚风撩人 2017-06-12 1 楼

有些主机服务商把php的allow_url_fopen选项是关闭了,就是没法直接使用file_get_contents来获取远程web页面的内容。那就是可以使用另外一个函数curl。

下面是file_get_contents和curl两个函数同样功能的不同写法

file_get_contents函数的使用示例:

< ?php
$file_contents = file_get_contents('http://www.ccvita.com/');
echo $file_contents;
?>

换成curl函数的使用示例:

 < ?php
$ch = curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, 'http://www.xiaocai.info');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);

echo $file_contents;
?>

利用function_exists函数来判断php是否支持一个函数可以轻松写出下面函数

 < ?php
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;
}
?>