PHP / cURL / Fedora-Probleme bei der Behebung des Hostnamens möglicherweise ein DNS-Problem?

1423
chris cohen

Ich habe das folgende einfache Testskript für cURL / php auf einem FC12 / Apache-Server, der über PHP 5.3.2, cURL v7.19.7 (gemäß phpinfo ()) verfügt:

$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://www.google.com/'); curl_setopt($ch, CURLOPT_VERBOSE, true); curl_setopt($ch, CURLOPT_HEADERFUNCTION, 'read_header'); curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'read_body'); curl_exec($ch); if ($error = curl_error($ch)) { echo "Error: $error<br />\n"; } function read_header($ch, $string) { $length = strlen($string); echo "Received $length bytes<br />\n"; return $length; } 

Wenn ich es jetzt über den Browser starte, wird Folgendes ausgegeben: "Fehler: Host" www.google.com "konnte nicht aufgelöst werden."

Wenn ich es über meine PHP-CGI-Befehlszeile auf dem Server laufen lasse, wird das zurückgegeben, was Sie erwarten würden (ohne alle BRs):

Header: HTTP/1.1 200 OK Header: Date: Tue, 13 Jul 2010 20:08:09 GMT Header: Expires: -1 Header: Cache-Control: private, max-age=0 Header: Content-Type: text/html; charset=ISO-8859-1 Header: Server: gws Header: X-XSS-Protection: 1; mode=block Header: Transfer-Encoding: chunked Header: Received 2507 bytes Received 1589 bytes Received 1362 bytes Received 2734 bytes Received 1690 bytes 

Wenn ich die Google-Zeile in die IP- Adresse von Google, z. B. http://72.14.204.147/, ändere, funktioniert das Skript sowohl über den Browser als auch über die Befehlszeile.

dig, ping, nslookup und allgemeine DNS scheinen auf diesem Rechner gut zu funktionieren. Ich sollte hinzufügen, dass DNS für diese Site eine Subdomain foo.ourdomain.edu verwendet und DNS von einem Windows 2003-Domänencontroller abruft.

3
Fedora ist seit einigen Jahren nicht mehr "Core". Ignacio Vazquez-Abrams vor 13 Jahren 0

2 Antworten auf die Frage

0
K-ICT

Kann die Erlaubnis sein von /etc/hosts?

Ich habe auch dieses Problem erfahren und gefunden

-rw-------. 1 root root 80 Dec 19 08:35 /etc/resolv.conf

Es sollte weltweit lesbar sein, ändern Sie dies in:

-rw-r--r--. 1 root root 80 Dec 19 08:35 /etc/resolv.conf

-1
Ignacio Vazquez-Abrams

Sie müssen den httpd_can_network_connectSELinux-Booleschen Wert aktivieren, wenn Sie möchten, dass httpd (unter dem PHP ausgeführt wird) externe Netzwerkverbindungen herstellen kann. Weitere booleans(8)Informationen finden Sie in der Manpage.

getsebool -a | grep httpd_can gibt mir: httpd_can_network_connect -> auf httpd_can_network_connect_db -> auf httpd_can_network_relay -> auf httpd_can_sendmail -> immer noch keine Freude chris cohen vor 13 Jahren 0
Das ist irgendwie ein DNS-Problem, nicht wahr? Scheint mir klar zu sein, weil der Zugriff per IP * von einem Skript aus funktioniert *. whitequark vor 13 Jahren 0