Saya mengajar diri sendiri beberapa goresan dasar dan saya menemukan bahwa kadang-kadang URL yang saya masukkan ke kode saya kembali 404, yang merupakan gusi semua sisa kode saya.
Jadi saya perlu tes di bagian atas kode untuk memeriksa apakah URL mengembalikan 404 atau tidak.
Ini akan tampak seperti tugas langsung, tetapi Google tidak memberi saya jawaban. Saya khawatir saya mencari hal yang salah.
Satu blog merekomendasikan saya menggunakan ini:
$valid = @fsockopen($url, 80, $errno, $errstr, 30);
dan kemudian tes untuk melihat apakah $ valid jika kosong atau tidak.
Tapi saya pikir URL yang memberi saya masalah memiliki arahan ulang, jadi $ valid akan kosong untuk semua nilai. Atau mungkin saya melakukan sesuatu yang salah.
Saya juga telah melihat ke dalam "permintaan kepala" tetapi saya belum menemukan contoh kode aktual yang bisa saya mainkan atau coba.
Saran? Dan apa ini tentang ikal?
sumber
curl_setopt($handle, CURLOPT_NOBODY, true);
sebelum menjalankancurl_exec
Jika Anda menjalankan php5 Anda dapat menggunakan:
Atau dengan php4 pengguna berkontribusi sebagai berikut:
Keduanya akan memiliki hasil yang mirip dengan:
Karenanya, Anda bisa memeriksa untuk melihat bahwa respons tajuk OK, misalnya:
Kode dan Definisi W3C
sumber
get_headers($https_url,1,443);
Saya yakin itu akan berfungsi meskipun tidak dalamget_headers()
fungsi standar .. Jangan ragu untuk mengujinya dan merespons dengan status untuk itu.Dengan kode strager, Anda juga dapat memeriksa CURLINFO_HTTP_CODE untuk kode lain. Beberapa situs web tidak melaporkan 404, melainkan hanya mengarahkan ulang ke halaman 404 khusus dan mengembalikan 302 (redirect) atau yang serupa. Saya menggunakan ini untuk memeriksa apakah file aktual (mis. Robots.txt) ada di server atau tidak. Jelas jenis file ini tidak akan menyebabkan pengalihan jika ada, tetapi jika tidak maka akan diarahkan ke halaman 404, yang seperti saya katakan sebelumnya mungkin tidak memiliki kode 404.
sumber
408 Request Timeout
, bukan a404
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, FALSE);
Seperti yang disarankan strager, lihatlah menggunakan CURL. Anda juga mungkin tertarik untuk menyetel CURLOPT_NOBODY dengan curl_setopt untuk melewati pengunduhan seluruh halaman (Anda hanya ingin tajuknya ).
sumber
Jika Anda mencari solusi termudah dan yang dapat Anda coba sekaligus, lakukanlah php5
sumber
Saya menemukan jawaban ini di sini :
Pada dasarnya, Anda menggunakan metode "file mendapatkan konten" untuk mengambil URL, yang secara otomatis mengisi variabel header respons http dengan kode status.
sumber
Ini akan memberi Anda benar jika url tidak mengembalikan 200 OK
sumber
tambahan, menguji 3 metode yang mempertimbangkan kinerja.
Hasilnya, setidaknya di lingkungan pengujian saya:
Curl menang
Tes ini dilakukan dengan pertimbangan bahwa hanya header (noBody) yang diperlukan. Uji dirimu:
sumber
Sebagai petunjuk tambahan untuk jawaban yang diterima:
Ketika menggunakan variasi dari solusi yang diusulkan, saya mendapat kesalahan karena pengaturan php 'max_execution_time'. Jadi yang saya lakukan adalah sebagai berikut:
Pertama saya mengatur batas waktu ke jumlah detik yang lebih tinggi, pada akhirnya saya mengaturnya kembali ke nilai yang ditentukan dalam pengaturan php.
sumber
sumber
Ini solusi singkatnya.
Dalam kasus Anda, Anda dapat mengubah
application/rdf+xml
apa pun yang Anda gunakan.sumber
Fungsi ini mengembalikan kode status URL di PHP 7:
Contoh:
sumber
Anda dapat menggunakan kode ini juga, untuk melihat status tautan apa pun:
sumber
ini adil dan sepotong kode, harapan berhasil untuk Anda
sumber
Ini caranya!
Skrip sederhana ini hanya membuat permintaan ke URL untuk kode sumbernya. Jika permintaan berhasil diselesaikan, itu akan menampilkan "URL Ada!". Jika tidak, itu akan menampilkan "URL Tidak Ada!".
sumber