Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah fungsi ping PHP saya sentiasa mengembalikan "mati" tanpa mengira alamat IP?

Mengapakah fungsi ping PHP saya sentiasa mengembalikan "mati" tanpa mengira alamat IP?

DDD
DDDasal
2024-11-06 05:13:02716semak imbas

Why does my PHP ping function always return

Ping Alamat IP Menggunakan PHP dan Gemakan Hasilnya

Dalam soalan pengaturcaraan ini, pengguna mendapatkan bantuan dalam mencipta fungsi PHP untuk ping alamat IP dan paparan sama ada ia masih hidup atau tidak. Mereka telah melaksanakan fungsi, tetapi ia secara konsisten mengembalikan "mati" tanpa mengira alamat IP yang dibekalkan.

Fungsi Awal:

function pingAddress($ip){
    $pingresult = shell_exec("start /b ping $ip -n 1");
    $dead = "Request timed out.";
    $deadoralive = strpos($dead, $pingresult);

    if ($deadoralive == false){
        echo "The IP address, $ip, is dead";
    } else {
        echo "The IP address, $ip, is alive";
    }

}

Penjelasan:

Fungsi ini cuba ping alamat IP menggunakan fungsi shell_exec, dengan pilihan -n 1 untuk menghantar hanya satu permintaan ping. Ia kemudian menyemak output arahan ping untuk rentetan "Permintaan tamat masa." untuk menentukan sama ada alamat IP masih hidup.

Isu:

  1. Perintah Khusus Windows: Perintah ping mula /b ialah khusus untuk Windows, dan ia mungkin tidak berfungsi pada sistem pengendalian lain.
  2. Menggunakan strpos pada Output: Memeriksa terus kedudukan rentetan dalam output ping mungkin tidak boleh dipercayai, kerana format output mungkin berbeza bergantung pada versi arahan ping.
  3. Petikan Berganda Hilang: Pembolehubah $ip tidak disertakan dalam petikan berganda, yang boleh menghalang tafsiran yang betul.

Cadangan Penyelesaian:

Soalan pengguna juga mencadangkan penyelesaian alternatif:

function pingAddress($ip) {
    $pingresult = exec("/bin/ping -n 3 $ip", $outcome, $status);
    if (0 == $status) {
        $status = "alive";
    } else {
        $status = "dead";
    }
    echo "The IP address, $ip, is  ".$status;
}

Penjelasan:

Fungsi ini:

  1. Menggunakan fungsi exec untuk melaksanakan arahan ping dengan pilihan -n 3 untuk menghantar tiga permintaan ping.
  2. Menyemak status keluar arahan ping, di mana a status 0 menunjukkan ping yang berjaya (iaitu, alamat IP masih hidup).
  3. Menggunakan pembolehubah $status untuk menentukan sama ada alamat IP itu hidup atau mati dan memaparkan hasilnya dengan sewajarnya.

Atas ialah kandungan terperinci Mengapakah fungsi ping PHP saya sentiasa mengembalikan "mati" tanpa mengira alamat IP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn