Звучит как ошибка. Но только для потомков вот несколько вещей, которые вы, возможно, захотите отладить.
allow_url_fopen
: уже протестировано
- PHP под Apache может вести себя иначе, чем PHP-CLI, и намекает на chroot / selinux / fastcgi / etc. ограничения безопасности
- локальный брандмауэр: маловероятно, так как curl работает
- блокировка агента пользователя: на самом деле это довольно часто, веб-сайты блокируют сканеры и неизвестных клиентов
- прозрачный прокси от вашего провайдера, который либо искажает, либо блокирует (пользовательский агент PHP или не пользовательский агент может быть интерпретирован как вредоносное ПО)
- Проблемы с PHP-оберткой
В любом случае, давайте сначала докажем, что обработчики потоков PHP работают:
<?php
if (!file_get_contents("data:,ok")) {
die("Houston, we have a stream wrapper problem.");
}
Тогда попробуйте посмотреть, выполняет ли PHP реальные HTTP-запросы вообще. Сначала откройте netcat на консоли:
nc -l 80000
И отладка только с:
<?php
print file_get_contents("http://localhost:8000/hello");
И отсюда вы можете попытаться связаться с PHP, посмотреть, вернется ли что-нибудь, если вы измените ответ. Сначала введите неверный ответ в netcat. Если нет ошибки, ваш пакет PHP не работает.
(Вы можете также попытаться связаться через дескриптор "tcp: // ..".)
Далее поэкспериментируем с параметрами оболочки потока http. Используйте буквально http://example.com/, который, как известно, работает и никогда не блокирует пользовательских агентов.
$context = stream_context_create(array("http"=>array(
"method" => "GET",
"header" => "Accept: xml/*, text/*, */*\r\n",
"ignore_errors" => false,
"timeout" => 50,
));
print file_get_contents("http://www.example.com/", false, $context, 0, 1000);
Я думаю ignore_errors здесь очень актуально. Но проверьте http://www.php.net/manual/en/context.http.php и, в частности, попытайтесь установить protocol_version
на 1,1 (получит ответ с разбивкой на части и неправильно интерпретирует, но, по крайней мере, мы посмотрим, вернется ли что-нибудь ).
Если даже это не помогло, попробуйте взломать оболочку http.
<?php
ini_set("user_agent" , "Mozilla/3.0\r\nAccept: */*\r\nX-Padding: Foo");
Это не только установит User-Agent, но и добавит дополнительные заголовки. Если при обработке запроса в оболочке потока http возникнет проблема с обработкой, это может в конечном итоге перехватить его.
В противном случае попробуйте отключить любые расширения Zend, Suhosin , PHP xdebug, APC и другие основные модули. Могут быть помехи. Иначе это потенциально проблема, специфичная для пакета Fedora. Попробуйте новую версию, посмотрите, сохраняется ли она в вашей системе.