Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menguji URL untuk ralat 404 dalam PHP?

Bagaimana untuk Menguji URL untuk ralat 404 dalam PHP?

PHPz
PHPzasal
2024-08-28 11:33:53473semak imbas

How to Test a URL for 404 error in PHP?

PHP: PHP (Hypertext Preprocessor) ialah bahasa skrip bahagian pelayan sumber terbuka yang digunakan secara meluas yang direka khusus untuk pembangunan web. Ia pada asalnya dicipta oleh Rasmus Lerdorf pada tahun 1994 dan sejak itu telah berkembang menjadi bahasa berkuasa yang digunakan oleh berjuta-juta pembangun di seluruh dunia.

PHP digunakan terutamanya untuk membangunkan halaman web dinamik dan aplikasi web. Ia membolehkan pembangun membenamkan kod PHP dalam HTML, menjadikannya mudah untuk mencampurkan logik sisi pelayan dengan lapisan pembentangan. Skrip PHP dilaksanakan pada pelayan, dan HTML yang terhasil dihantar ke pelayar klien.

Untuk menguji URL untuk ralat 404 dalam PHP, terdapat pendekatan berbeza yang boleh anda ambil. Berikut adalah beberapa kaedah alternatif:

  • Menggunakan file_get_contents

  • Menggunakan get_headers dan strpos dengan stream_context_create

  • Menggunakan curl_exec dengan CURLOPT_NOBODY

Menggunakan file_get_contents untuk menguji URL untuk ralat 404 dalam PHP

<?php
   function isUrlValid($url) {
      // Disable error reporting for file_get_contents
      $context = stream_context_create(['http' => ['ignore_errors' => true]]);
      // Fetch the URL content
      $content = file_get_contents($url, false, $context);
      // Get the response headers
      $headers = $http_response_header;
      // Check if the response code contains "404"
      foreach ($headers as $header) {
         if (stripos($header, 'HTTP/1.1 404') !== false) {
            return false; // URL is invalid or returns a 404 error
         }
      }
      return true; // URL is valid
   }
   // Usage
   $url = "http://example.com";
   if (isUrlValid($url)) {
      echo "URL is valid.";
   } else {
      echo "URL is invalid or returns a 404 error.";
   }
?>

Dalam pendekatan ini, fungsi isUrlValid mengambil URL sebagai parameter. Ia mencipta konteks strim dengan ignore_errors ditetapkan kepada benar, yang menyekat sebarang ralat yang mungkin dihadapi oleh file_get_contents semasa mengambil kandungan URL.

Fungsi file_get_contents kemudiannya digunakan untuk mengambil kandungan URL, menghantar konteks strim sebagai hujah ketiga. Fungsi mengembalikan kandungan sebagai rentetan.

Pengepala respons disimpan dalam pembolehubah $http_response_header, yang diisi secara automatik oleh file_get_contents dengan pengepala daripada permintaan HTTP terakhir.

Fungsi ini kemudian melelang melalui pengepala dan menyemak sama ada mana-mana daripadanya mengandungi rentetan "HTTP/1.1 404" menggunakan stripos (carian tidak sensitif huruf besar-besaran). Jika pengepala dengan kod respons 404 ditemui, ini bermakna URL tidak sah atau mengembalikan ralat 404 dan fungsi mengembalikan palsu.

Jika tiada kod respons 404 ditemui dalam pengepala, fungsi itu kembali benar, menunjukkan bahawa URL itu sah.

Anda boleh menggantikan "http://example.com" dengan URL yang ingin anda uji. Perlu diingat bahawa file_get_contents mungkin dihadkan oleh konfigurasi pelayan tertentu, jadi pastikan ia dibenarkan dalam persekitaran anda.

Menggunakan get_headers dan strpos dengan stream_context_create

Berikut ialah penjelasan terperinci tentang menggunakan get_headers dan strpos dengan stream_context_create untuk menguji URL untuk ralat 404 dalam PHP:

<?php
   function isUrlValid($url) {
      // Create a stream context with "ignore_errors" set to true
      $context = stream_context_create(['http' => ['ignore_errors' => true]]);
      // Fetch the URL headers
      $headers = get_headers($url, 0, $context);
      // Check if the response code contains "404"
      if (strpos($headers[0], '404') !== false) {
         return false; // URL is invalid or returns a 404 error
      }
      return true; // URL is valid
   }
   // Usage
   $url = "http://example.com";
   if (isUrlValid($url)) {
      echo "URL is valid.";
   } else {
      echo "URL is invalid or returns a 404 error.";
   }
?>

Dalam pendekatan ini, fungsi isUrlValid mengambil URL sebagai parameter. Ia mencipta konteks strim menggunakan stream_context_create dengan pilihan ignore_errors ditetapkan kepada benar. Konteks ini digunakan untuk mengabaikan sebarang ralat yang dihadapi semasa mendapatkan semula pengepala URL.

Fungsi get_headers kemudian dipanggil dengan URL dan konteks strim sebagai parameter. Ia mengembalikan tatasusunan yang mengandungi pengepala respons untuk URL.

Fungsi ini menyemak elemen pertama tatasusunan pengepala ($pengepala[0]) dan menggunakan strpos untuk mencari rentetan "404" dalam pengepala. Jika rentetan "404" ditemui, ini bermakna URL tidak sah atau mengembalikan ralat 404 dan fungsi mengembalikan palsu.

Jika rentetan "404" tidak ditemui dalam pengepala, fungsi itu kembali benar, menunjukkan bahawa URL itu sah.

Anda boleh menggantikan "http://example.com" dengan URL yang ingin anda uji. Pastikan fungsi get_headers dan fungsi stream_context_create didayakan dalam konfigurasi PHP anda.

Menggunakan curl_exec dengan CURLOPT_NOBODY

Berikut ialah penjelasan terperinci tentang menggunakan curl_exec dengan pilihan CURLOPT_NOBODY untuk menguji URL untuk ralat 404 dalam PHP:

<?php
   function isUrlValid($url) {
      // Initialize cURL session
      $ch = curl_init($url);

      // Set the CURLOPT_NOBODY option to send a HEAD request
      curl_setopt($ch, CURLOPT_NOBODY, true);

      // Set CURLOPT_RETURNTRANSFER option to receive the response as a string
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

      // Execute the request
      curl_exec($ch);

      // Get the response code
      $responseCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

      // Close cURL session
      curl_close($ch);

      // Check if the response code is 404
      return $responseCode !== 404;
   }

   // Usage
   $url = "http://example.com";
   if (isUrlValid($url)) {
      echo "URL is valid.";
   } else {
      echo "URL is invalid or returns a 404 error.";
   }
?>

Dalam pendekatan ini, fungsi isUrlValid mengambil URL sebagai parameter. Ia memulakan sesi cURL menggunakan curl_init dengan URL.

Fungsi curl_setopt digunakan untuk menetapkan pilihan CURLOPT_NOBODY kepada benar, yang menghantar permintaan HEAD dan bukannya permintaan GET. Dengan cara ini, hanya pengepala respons yang diambil, bukan keseluruhan badan respons.

Pilihan CURLOPT_RETURNTRANSFER ditetapkan kepada benar untuk memastikan respons dikembalikan sebagai rentetan.

Seterusnya, curl_exec dipanggil untuk melaksanakan permintaan cURL.

Selepas permintaan dilaksanakan, curl_getinfo digunakan untuk mendapatkan semula kod respons HTTP daripada sesi cURL menggunakan pilihan CURLINFO_HTTP_CODE.

Akhir sekali, curl_close dipanggil untuk menutup sesi cURL.

Fungsi kemudian menyemak sama ada kod respons tidak sama dengan 404. Jika kod respons bukan 404, ini bermakna URL sah dan fungsi itu kembali benar. Jika tidak, ia mengembalikan palsu, menunjukkan bahawa URL itu tidak sah atau mengembalikan ralat 404.

Anda boleh menggantikan "http://example.com" dengan URL yang ingin anda uji. Pastikan anda mendayakan sambungan cURL dalam konfigurasi PHP anda untuk pendekatan ini berfungsi.

Kesimpulan

Ketiga-tiga kaedah menyediakan cara untuk menguji URL untuk ralat 404 dalam PHP. Kesemuanya mempunyai kebaikan dan keburukan mereka, dan pilihannya bergantung pada keperluan khusus anda dan perpustakaan yang tersedia dalam projek anda. Anda boleh memilih kaedah yang paling sesuai dengan keperluan anda.

Atas ialah kandungan terperinci Bagaimana untuk Menguji URL untuk ralat 404 dalam PHP?. 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