У меня большая проблема. Я только что перешел на новый выделенный сервер под управлением Plesk 10 и Ubuntu 11.04, и мои скрипты не могут запускать file_get_contents или завиваться на внешние URL-адреса в режиме cgi. В правильном файле 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. У меня была хостинговая компания весь день безуспешно. Любая помощь с благодарностью получена.
Оказалось, что проблема была вызвана SELinux, я исправил ее с помощью этой команды:
setsebool -P httpd_can_network_connect 1
Спасибо @jsmith в этой теме: Ошибка PHP file_get_contents в CentOS поскольку он был вторым человеком, который предположил, что SELinux вызывает такие проблемы на CentOS. Я новичок, поэтому буду пробовать что-то только тогда, когда это подтверждается более чем одним источником.