file_get_contents url 包装器适用于 cli,但不适用于 cgi

file_get_contents url 包装器适用于 cli,但不适用于 cgi

我遇到了一个大问题。我刚刚升级到运行 Plesk 10 和 Ubuntu 11.04 的新专用服务器,我的脚本无法在 cgi 模式下运行 file_get_contents 或 curl 到外部 URL。在正确的 php.ini 文件中将 allow_url_fopen 设置为 On,但我仍然收到以下错误。

file_get_contents(http://www.google.com): failed to open stream: Permission denied

Curl 请求返回 false:

function get_data($url)
{
  // create a new cURL resource
$ch = curl_init();

// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, false);

// grab URL and pass it to the browser
$data = curl_exec($ch);

// close cURL resource, and free up system resources
curl_close($ch);
 var_dump($data);
}    
get_data("http://www.google.com");//bool(false)

两者 (file_get_contents 和 curl) 在从命令行和 cron 运行的脚本中运行良好,当 php 作为 apache 模块运行时也运行良好。只有在浏览器中运行并作为 cgi 或 fastcgi 应用程序运行时才会出现问题。我整天都在托管公司工作,但毫无进展。任何帮助我都感激不尽。

答案1

事实证明是 SELinux 导致了该问题,我使用以下命令修复了它:

setsebool -P httpd_can_network_connect 1

感谢此主题中的@jsmith:CentOS 上的 PHP file_get_contents 错误因为他是第二个提出 SELinux 导致 centOS 出现此类问题的人。我是新手,所以只有在得到多个来源的确认后我才会尝试。

相关内容