我遇到了一个大问题。我刚刚升级到运行 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 出现此类问题的人。我是新手,所以只有在得到多个来源的确认后我才会尝试。