1

Настроить:

  • cURL 7.32.0
  • Apache 2.2.25
  • PHP 5.5.4

Всякий раз, когда я пытаюсь:

$ch = curl_init('www.google.com');
curl_exec($ch);

var_dump(curl_error($ch));

в PHP я получаю:

Не удалось разрешить хост: www.google.com

Если я изменю на curl_init('80.233.168.207') (решено на google.com), скрипт выполнится.

Хотя, запустив curl www.google.com в CLI, я получаю страницу 302 Moved HTML, из-за перенаправления на локализованный сайт (* .lv), но все же это означает, что cURL успешно выполнен.

Я видел несколько похожих вопросов (но не о SE), большинство из них говорили, что Apache запускается либо раньше, либо одновременно с Network Manager, поэтому не получает информацию DNS. На большинство вопросов есть ответы, объясняющие, что проблема может быть временно решена / отлажена путем явной остановки, а затем запуска демона Apache (вместо restart / graceful-restart).

fsockopen , file_get_contents работает безупречно, хотя.

Мой виртуальный хост Apache:

<VirtualHost *.777>
    ServerAdmin stone@altas.lv
    ServerName localhost

    DocumentRoot "/srv/stone/public"

    ErrorLog "/srv/stone/app/storage/logs/apache-errors.log"
    CustomLog "/srv/stone/app/storage/logs/apache-custom.log" common

    <Directory /srv/stone/public>
        php_admin_value open_basedir /

        # Pretty URL rewrites, better not to rely on .htaccess
        <IfModule mod_rewrite.c>
            Options -MultiViews

            RewriteEngine On
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteRule ^ index.php [L]
        </IfModule>

        # Prevent further overrides
        AllowOverride None

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

А в глобальном конфиге просто есть специальная запись для Listen 777 .

Это и это, и то и другое приводят к проблеме с DNS, так что, думаю, у меня тоже могут быть проблемы с этим, плюс, похоже, это выглядит так.

Я попробовал изменить записи виртуального хоста на 0.0.0.0:777 и другие конфигурации безрезультатно.

Как мне исправить проблему?

2 ответа2

1

Похоже, что проблема была с моим /etc/resolv.conf .

Я настроил собственный менеджер сетевых подключений, который выполнял внешнюю команду для настройки серверов имен из определенного файла конфигурации. Программа установки просто удалит содержимое /etc/resolv.conf , добавит новую информацию, а затем запустит сетевой интерфейс, установит его параметры (IP, Mask, Cast, Gate) и вуаля.

Видимо, что-то облажался. Я предполагаю, что мне придется искать различные цели До / После и написать собственный модуль обновления resolv.conf .

Я оставил resolv.conf статическим, и это, похоже, решило проблему.

В конце концов, очевидно, что это была проблема DNS. К счастью, это исправлено.

0

Вы пробовали вариант CURL_IPRESOLVE_V4?

$ch = curl_init('www.google.com');
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_exec($ch);
var_dump(curl_error($ch));

И каков вывод заголовков, если вы используете опцию CURLOPT_HEADER?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .