Klingt wie ein Fehler. Aber nur für die Nachwelt, hier sind ein paar Dinge, die Sie vielleicht debuggen möchten.
allow_url_fopen
: bereits getestet
- PHP unter Apache könnte sich anders verhalten als PHP-CLI und bei chroot/selinux/FastCGI/etc andeuten würde.Sicherheitseinschränkungen
- lokaler Firewall: unwahrscheinlich, da curl funktioniert
- Sperr User-Agent: Das ist durchaus üblich, tatsächlich, Websites blockieren Crawler und unbekannte Clients
- transparente Proxy von Ihrem ISP, die entweder Mangeln oder Blöcke (PHP benutzer- : Mittel oder nicht-User-Agent könnte als Malware)
- PHP Stream Wrapper Probleme, die PHPs
wie dem auch sei, Beweis Lassen Sie uns zunächst Stream-Handler sind funktional interpretiert werden
Dann versuchen Sie zu sehen, ob PHP überhaupt echte HTTP-Anfragen macht. Erster offener netcat auf der Konsole:
nc -l 80000
und debuggen mit nur:
<?php
print file_get_contents("http://localhost:8000/hello");
Und von hier aus können Sie versuchen, mit PHP zu kommunizieren, ob etwas zurück, wenn Sie die Antwort variate. Geben Sie zuerst eine ungültige Antwort in netcat ein. Wenn kein Fehler ausgelöst wird, wird Ihr PHP-Paket gebrockt.
(Sie auch versuchen könnte, eine Kommunikation über "tcp: // .." handle dann.)
Als nächstes wird das Experimentieren mit Wrapper-Parameter http-Stream. Verwenden Sie wörtlich http://example.com/, die bekanntermaßen funktioniert und Benutzeragenten nie blockiert.
$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);
Ich denke IGNORE_ERRORS hier sehr relevant ist. Aber check out http://www.php.net/manual/en/context.http.php und speziell versuchen, protocol_version
auf 1.1 (wird chunked und fehlinterpretierte Antwort gesetzt, aber zumindest werden wir sehen, ob irgendetwas zurückgibt).
Wenn auch das bleibt erfolglos, dann versuchen Sie, den http-Wrapper zu hacken.
<?php
ini_set("user_agent" , "Mozilla/3.0\r\nAccept: */*\r\nX-Padding: Foo");
Dies wird nicht nur den User-Agent einstellen, sondern zusätzliche Header injizieren. Wenn es ein Verarbeitungsproblem beim Erstellen der Anforderung innerhalb des HTTP-Stream-Wrappers gibt, könnte dies möglicherweise sehr schnell dazu führen.
Andernfalls versuchen, alle Zend-Erweiterungen, Suhosin, PHP xdebug, APC und andere Kernmodule zu deaktivieren. Es könnte zu Störungen kommen. Sonst ist dies möglicherweise ein Problem, das spezifisch für das Fedora-Paket ist. Probieren Sie eine neue Version aus und prüfen Sie, ob sie auf Ihrem System weiterhin besteht.
Gibt es einen Grund, warum Sie nicht wollen, Libcurl benutzen? Scheint, wenn das funktioniert, könnte es ein idealer Ersatz für Sie sein. – Treffynnon
@TREFFYNNON Ich schreibe gerade den Code um, um die Verwendung zu curlen, möchte aber trotzdem wissen, was mit file_get_contents() falsch ist. –
Für welche URL funktioniert es nicht? – mario