CLI cURL berfungsi dengan sempurna, Apache dengan mod_php tidak dapat menyelesaikan host, bagaimana cara memperbaikinya?

1

Mempersiapkan:

  • CURL 7.32.0
  • Apache 2.2.25
  • PHP 5.5.4

Setiap kali saya mencoba untuk:

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

var_dump(curl_error($ch));

dalam PHP, saya mendapatkan:

Tidak dapat menyelesaikan host: www.google.com

Jika saya berubah menjadi curl_init('80.233.168.207') (diselesaikan google.com), skrip dijalankan.

Padahal, berlari curl www.google.com di CLI, saya mendapatkan 302 Moved Halaman HTML, karena mengarahkan ulang ke situs yang dilokalkan (* .lv), tetapi tetap saja, itu berarti bahwa cURL berhasil dijalankan.

Saya telah melihat beberapa pertanyaan serupa (bukan pada SE), kebanyakan dari mereka mengatakan bahwa Apache dimulai sebelum atau bersamaan dengan Network Manager, karenanya tidak menerima informasi DNS. Sebagian besar pertanyaan memiliki jawaban yang menjelaskan, bahwa masalah ini dapat sementara diselesaikan / di-debug dengan menghentikan secara eksplisit, kemudian memulai daemon Apache (bukan restart / anggun-restart).

fsockopen, file_get_contents bekerja dengan sempurna, meskipun.

Tuan rumah virtual Apache saya:

<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>

Dan konfigurasi global hanya memiliki entri khusus untuk Listen 777.

Ini dan ini , keduanya mengarah ke masalah DNS, jadi, saya pikir saya mungkin punya masalah dengan itu juga, ditambah, jelas terlihat seperti itu.

Saya telah mencoba dengan mengubah entri host virtual menjadi 0.0.0.0:777 dan konfigurasi lainnya tidak berhasil.

Bagaimana cara memperbaiki masalah ini?

joltmode
sumber
Jika Anda mencoba memasukkan 80.233.168.207 www.google.com di Anda /etc/hosts Anda harus dapat mengonfirmasi bahwa ini adalah masalah DNS. Agak aneh bahwa perintah CLI Anda berhasil melakukan pencarian. FYI, kodenya berfungsi pada saya Apache instalasi.
Qben
Menambahkannya ke host memang membuat skrip berfungsi.
joltmode

Jawaban:

1

Tampaknya masalahnya dengan saya /etc/resolv.conf.

Saya telah mengatur manajer koneksi jaringan kustom, yang menjalankan perintah eksternal untuk mengatur server nama dari file konfigurasi tertentu. Setup hanya akan menghapus konten /etc/resolv.conf, tambahkan dengan info baru dan kemudian mulai antarmuka jaringan, atur parameternya (IP, Mask, Cast, Gate) dan voila.

Rupanya itu mengacaukan sesuatu. Saya kira saya harus mencari target Sebelum / Setelah yang berbeda dan menulis kebiasaan resolv.conf pembaru.

Saya memang pergi resolv.conf statis sekarang, dan itu tampaknya memperbaiki masalah.

Pada akhirnya, jelas ini adalah masalah DNS. Untungnya, sudah diperbaiki.

joltmode
sumber
0

Sudahkah Anda mencoba opsi 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));

Dan apa output dari header jika Anda menggunakan opsi CURLOPT_HEADER?

Rik
sumber
FYI: curl_setopt harus didahului sebelum curl_exec, tetapi, Ia bahkan tidak mendapatkan sejauh itu untuk mengumpulkan tajuk, ia tidak bisa terhubung. Mati sepanjang waktu bersama Could not resolve host. Saya sudah mencoba opsi IPRESOLVE_V4 sebelumnya, tidak berhasil. Lakukan sekarang lagi, tidak ada ...
joltmode
Ups, ya. Itu adalah tipe. Punya kode yang bekerja di sini dan itu salah dengan salin dan tempel.
Rik
Kenapa kamu mencoba 80.233.168.207. Ini tidak sama dengan Anda www.google.com. Di sini curl_info memberi 74.125.132.106 sebagai primary_ip di www.google.com. bisakah kamu mencoba curl_init('74.125.132.106')? Apa hasil yang Anda dapatkan? Sini 80.233.168.207 langsung ke google.com tanpa memberikan page is moved. Apakah kamu sudah mencoba curl 80.233.168.207 dan curl 74.125.132.106 di CLI? (ini semua bisa menjadi masalah pelokalan tetapi Anda dapat mencoba)
Rik
Haha, keduanya dengan curl -v 80.233.168.207 dan curl -v 74.125.132.106 di CLI saya mendapatkan 200 OK. Dengan curl www.google.com saya mendapatkan 302 Found. Sama dengan Curl di PHP. ping www.google.com memberi saya 74.125.132.147.
Rik
Itu tidak mengubah fakta bahwa saya memiliki masalah dengan DNS'es yang terkait dengan Apache, mod_php dan curl pada mesin.
joltmode