Проблемы с PHP / cURL / Fedora при разрешении имени хоста возможно проблема с DNS?

1369
chris cohen

У меня есть следующий простой тестовый скрипт для cURL / php на сервере FC12 / apache, который имеет PHP 5.3.2, cURL v7.19.7 (согласно 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; } 

Теперь, если я запускаю его через браузер, он возвращает: «Ошибка: не удалось разрешить хост« www.google.com »»

Если я запускаю его через командную строку php-cgi на сервере, он возвращает то, что вы ожидаете (без всех 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 

Если я изменю строку google на ip Google, например http://72.14.204.147/, тогда скрипт будет работать как через браузер, так и через командную строку.

dig, ping, nslookup и вообще dns вроде бы работают нормально на этой машине. Я должен добавить, что DNS для этого сайта использует поддомен foo.ourdomain.edu и получает его от контроллера домена Windows 2003.

3
Fedora уже несколько лет не является «ядром». Ignacio Vazquez-Abrams 14 лет назад 0

2 ответа на вопрос

0
K-ICT

Может быть разрешение /etc/hosts?

Я также столкнулся с этой проблемой и нашел

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

Это должно быть читаемо, измените это на:

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

-1
Ignacio Vazquez-Abrams

Вы должны включить httpd_can_network_connectлогическое значение SELinux, если хотите разрешить httpd (на котором работает PHP) устанавливать внешние сетевые подключения. Смотрите booleans(8)man-страницу для деталей.

getsebool -a | grep httpd_can дает мне: httpd_can_network_connect -> на httpd_can_network_connect_db -> на httpd_can_network_relay -> на httpd_can_sendmail -> на все еще нет радости chris cohen 14 лет назад 0
Это как-то проблема DNS, не так ли? Мне кажется, что доступ по IP * работает из скрипта *. whitequark 14 лет назад 0

Похожие вопросы