Назад | Перейти на главную страницу

file_get_contents url-обертки работают на cli, но не cgi

У меня большая проблема. Я только что перешел на новый выделенный сервер под управлением 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. Я новичок, поэтому буду пробовать что-то только тогда, когда это подтверждается более чем одним источником.