1 votes

CLI cURL fonctionne parfaitement, Apache avec mod_php ne peut pas résoudre l'hôte, comment réparer?

Configuration :

  • cURL 7.32.0
  • Apache 2.2.25
  • PHP 5.5.4

Chaque fois que j'essaie de :

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

var_dump(curl_error($ch));

dans PHP, j'obtiens :

Impossible de résoudre l'hôte : www.google.com

Si je change en curl_init('80.233.168.207') (google.com résolu), le script s'exécute.

Cependant, en exécutant curl www.google.com en CLI, j'obtiens une page HTML 302 Redirigé, en raison d'une redirection vers un site localisé (*.lv), mais cela signifie tout de même que cURL s'est exécuté avec succès.

J'ai vu plusieurs questions similaires (pas sur SE cependant), la plupart disent que Apache est démarré avant ou en même temps que Network Manager, donc ne reçoit pas les informations DNS. La plupart des questions ont des réponses expliquant que le problème peut être temporairement résolu/débogué en arrêtant explicitement, puis en redémarrant le démon Apache (au lieu de le redémarrer/en grace).

fsockopen, file_get_contents fonctionnent parfaitement, cependant.

Mon hôte virtuel Apache :

    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

        php_admin_value open_basedir /

        # Réécritures d'URL jolies, mieux ne pas dépendre de .htaccess

            Options -MultiViews

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

        # Empêcher davantage de remplacements
        AllowOverride None

        Order allow,deny
        Allow from all

Et la configuration globale a simplement une entrée spécifique pour Listen 777.

Ceci et cela, mènent tous deux à un problème DNS, donc, je pense que j'ai peut-être des problèmes avec également, de plus, cela semble clair.

J'ai essayé en changeant les entrées d'hôte virtuel en 0.0.0.0:777 et d'autres configurations en vain.

Comment puis-je résoudre le problème ?

0 votes

Si vous essayez d'ajouter 80.233.168.207 www.google.com dans votre fichier /etc/hosts, vous devriez pouvoir confirmer qu'il s'agit d'un problème de DNS. Il est un peu étrange que votre commande CLI parvienne à effectuer la recherche. Pour information, le code fonctionne sur mon installation Apache.

0 votes

Ajouter cela aux hôtes a permis au script de fonctionner.

1voto

Stefan L Points 210

Il semblerait que le problème était avec mon /etc/resolv.conf.

J'avais configuré un gestionnaire de connexion réseau personnalisé, qui exécutait une commande externe pour configurer les serveurs de noms à partir d'un fichier de configuration spécifique. La configuration effaçait simplement le contenu de /etc/resolv.conf, ajoutait de nouvelles informations, puis démarrer l'interface réseau, définissait ses paramètres (IP, Masque, Cast, Passerelle) et voilà.

Apparemment, cela a causé un problème. Je suppose que je vais devoir chercher d'autres cibles Before/After et écrire un programme de mise à jour de resolv.conf personnalisé.

J'ai laissé resolv.conf statique maintenant, et cela semble avoir résolu le problème.

En fin de compte, c'était clairement un problème de DNS. Heureusement, c'est réglé.

0voto

Rik Points 12809

Avez-vous essayé l'option 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));

Et quel est le résultat des en-têtes si vous utilisez l'option CURLOPT_HEADER ?

0 votes

À noter : curl_setopt doit être placé avant curl_exec, mais il ne parvient même pas à récupérer les en-têtes, il ne parvient tout simplement pas à se connecter. Il plante tout le temps avec Could not resolve host. J'ai déjà essayé l'option IPRESOLVE_V4 auparavant, ça ne fonctionne pas. Je viens de le refaire, mais rien...

0 votes

Oops, oui. C'était une erreur de frappe. J'avais un code fonctionnel ici et il a mal tourné avec la copie et le collage.

0 votes

Pourquoi avez-vous essayé 80.233.168.207. Ce n'est pas la même chose que votre www.google.com. Ici, le curl_info donne 74.125.132.106 comme primary_ip sur www.google.com. Pourriez-vous essayer curl_init('74.125.132.106')? Quel résultat obtenez-vous? Ici, 80.233.168.207 va directement à google.com sans afficher une page is moved. Avez-vous essayé curl 80.233.168.207 et curl 74.125.132.106 en CLI? (il se peut que ce soit un problème de localisation mais vous pouvez essayer)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X