Suena como un error. Pero solo para la posteridad, aquí hay algunas cosas que quizás desee depurar.
allow_url_fopen
: Ya se han probado
- PHP bajo Apache podría comportarse de manera diferente a PHP-CLI y sería insinuar/fastcgi/chroot/selinux etc.restricciones de seguridad
- servidor de seguridad local: rizo poco probable ya que funciona
- usuario-agente de bloqueo: Esto es bastante común en realidad, sitios web de bloque rastreadores y clientes desconocidos
- proxy transparente de su ISP, que o bien mangles o bloques (PHP por el usuario agente o no de agente de usuario podría interpretarse como malware)
- problemas envoltura de secuencia PHP
de todos modos, primero nos dejó una prueba de que los controladores de flujo phps son funcionales:
<?php
if (!file_get_contents("data:,ok")) {
die("Houston, we have a stream wrapper problem.");
}
A continuación, intente ver si PHP realiza solicitudes HTTP reales. netcat abre por primera vez en la consola:
nc -l 80000
y depurar con sólo:
<?php
print file_get_contents("http://localhost:8000/hello");
Y a partir de aquí se puede tratar de comunicarse con PHP, ver si hay algo devuelve si la respuesta variable aleatoria. Ingrese una respuesta no válida primero en netcat. Si no se produce ningún error, su paquete de PHP está borked.
(También puede tratar de comunicarse a través de un "tcp: // .." manejar a continuación.)
Lo siguiente está experimentando con los parámetros de envoltura de flujo HTTP. Use http://example.com/ literalmente, que se sabe que funciona y nunca bloquea a los usuarios-agentes.
$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);
creo ignore_errors es muy relevante aquí. Pero mira http://www.php.net/manual/en/context.http.php y específicamente intenta configurar protocol_version
a 1.1 (obtendrá una respuesta fragmentada y mal interpretada, pero al menos veremos si cualquier cosa regresa).
Si incluso esto sigue sin éxito, intente hackear el envoltorio http.
<?php
ini_set("user_agent" , "Mozilla/3.0\r\nAccept: */*\r\nX-Padding: Foo");
Esto no solo configurará el User-Agent, sino que inyectará encabezados adicionales. Si hay un problema de procesamiento con la construcción de la solicitud dentro de la envoltura de flujo http, entonces esto podría muy eventualmente atraparlo.
De lo contrario, intente desactivar las extensiones de Zend, Suhosin, PHP xdebug, APC y otros módulos principales. Podría haber interferencias. De lo contrario, este es potencialmente un problema específico del paquete de Fedora. Pruebe una nueva versión, vea si persiste en su sistema.
¿Hay alguna razón por la que no desea utilizar libcurl? Parece que si está funcionando podría ser un reemplazo ideal para usted. – Treffynnon
@Treffynnon Estoy reescribiendo el código para curvar el uso en este momento, pero aún quiero saber qué está mal con file_get_contents() –
¿Para qué URL específica no funciona? – mario