CLI cURL funciona perfeitamente, o Apache com mod_php não pode resolver o host, como corrigir?

1

Configuração:

  • cURL 7.32.0
  • Apache 2.2.25
  • PHP 5.5.4

Sempre que tento:

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

var_dump(curl_error($ch));

dentro do PHP, eu recebo:

Could not resolve host: www.google.com

Se eu mudar para curl_init('80.233.168.207') (resolvido google.com), o script será executado.

Embora, executando curl www.google.com na CLI, recebo uma página 302 Moved HTML, devido ao redirecionamento para o site localizado (* .lv), mas ainda assim, isso significa que o cURL foi executado com êxito.

Já vi várias perguntas semelhantes (não no SE), a maioria delas dizendo que o Apache foi iniciado antes ou ao mesmo tempo com o Network Manager, portanto, não recebendo informações de DNS. A maioria das perguntas tem respostas explicando que o problema pode ser temporariamente resolvido / depurado, parando explicitamente e, em seguida, iniciando o daemon do Apache (em vez de restart / graceful-restart).

fsockopen , file_get_contents funciona perfeitamente, no entanto.

Meu host virtual do Apache:

<VirtualHost *.777>
    ServerAdmin [email protected]
    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>

E a configuração global só tem uma entrada específica para Listen 777 .

Isto e isso , ambos levam ao problema de DNS, então, eu acho que posso ter problemas com isso também Além disso, parece claramente.

Eu dei uma chance mudando as entradas do host virtual para 0.0.0.0:777 e outras configurações sem sucesso.

Como corrijo o problema?

    
por joltmode 25.09.2013 / 09:30

2 respostas

1

Parece que o problema foi com meu /etc/resolv.conf .

Eu tinha configurado um gerenciador de conexões de rede personalizado, que executava um comando externo para configurar servidores de nomes a partir de um arquivo de configuração específico. A configuração simplesmente apagaria o conteúdo de /etc/resolv.conf , adicionaria novas informações e depois iniciaria a interface de rede, definiria seus parâmetros (IP, Mask, Cast, Gate) e voila.

Aparentemente, isso estragou algo. Eu acho que vou ter que procurar por diferentes objetivos antes / depois e escrever um resolv.conf atualizador personalizado.

Eu deixei resolv.conf static agora, e isso parece corrigir o problema.

No final, claramente esse era um problema de DNS. Felizmente, está consertado.

    
por 30.09.2013 / 14:12
0

Você já tentou a opção 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));

E qual é a saída dos cabeçalhos se você usar a opção CURLOPT_HEADER?

    
por 25.09.2013 / 10:56