Mam następujący prosty skrypt testowy dla cURL / php na serwerze FC12 / apache, który ma PHP 5.3.2, cURL 7.19.7 (zgodnie z phpinfo ()):
$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;
}
Teraz, jeśli uruchomię go przez przeglądarkę, zwraca: „Błąd: nie można rozwiązać hosta„ www.google.com ”
Jeśli uruchomię go za pomocą linii poleceń php-cgi na serwerze, zwraca to, czego można się spodziewać (bez wszystkich BR):
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
Jeśli zmienię linię google na google's IP, np. http://72.14.204.147/ następnie skrypt działa przez przeglądarkę, a także przez wiersz poleceń.
Dig, ping, nslookup i ogólne dns wydają się działać poprawnie na tym komputerze. Powinienem dodać, że DNS dla tej witryny używa subdomeny foo.ourdomain.edu i pobiera DNS z kontrolera domeny Windows 2003.
Odpowiedzi:
Może być zgodą
/etc/hosts
?Doświadczyłem również tego problemu i znalazłem
-rw-------. 1 root root 80 Dec 19 08:35 /etc/resolv.conf
Powinien być czytelny na całym świecie, zmień go na:
-rw-r--r--. 1 root root 80 Dec 19 08:35 /etc/resolv.conf
źródło
Musisz włączyć
httpd_can_network_connect
SELinux boolean, jeśli chcesz pozwolić httpd (który PHP działa jako) na tworzenie zewnętrznych połączeń sieciowych. Zobaczbooleans(8)
strona podręcznika dla szczegółów.źródło