Alternatif untuk file_get_contents yang disabled on server by allow_url_fopen=0
cURL alternatif untuk file_get_contents melalui HTTP
Dalam versi PHP yang lebih baru, Anda akan sering mendapati bahwa mengambil file jarak jauh menggunakan fopen atau file_get_contents telah dinonaktifkan. Disini kita hadirkan sebuah fungsi http_get_contents menggunakan cURL yang bisa berfungsi sebagai solusi.1. Fungsi http_get_contents
Ini saat ini sedang dalam proses dengan beberapa penyempurnaan dalam pipa.function http_get_contents($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_TIMEOUT, 1); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); if(FALSE === ($retval = curl_exec($ch))) { error_log(curl_error($ch)); } else { return $retval; } }
Jika perpustakaan cURL belum diaktifkan di PHP anda akan mendapatkan fungsi error yang tidak ditemukan mencoba memanggil curl_init.
Versi masa depan akan mencakup penanganan kesalahan dan penguraian header respons HTTP yang lebih baik, untuk mendeteksi tautan yang rusak dan mengikuti pengalihan misalnya.
2. Contoh Penggunaan
Blok kode berikut memeriksa apakah alamat file dimulai dengan http dan bersyarat memanggil http_get_contents atau file_get_contents :$file = "http://www.the-art-of-web.com/rss.xml"; $contents = preg_match("/^http/", $file) ? http_get_contents($file) : file_get_contents($file);Pendekatan cURL juga bisa digunakan untuk FTP dan protokol lainnya.
3. Peningkatan Fungsi
Setelah meletakkan fungsi ini melalui langkah-langkahnya, kami menemukan beberapa perbaikan.Pertama, Anda sekarang dapat menyediakan serangkaian pilihan tambahan untuk disertakan dalam permintaan dengan mengirimkan array asosiatif ( $ opts ), dan kedua, nilai default disertakan untuk HTTP_USER_AGENT dengan menggunakan nama domain pemanggil sebagai string User Agent.
function http_get_contents($url, $opts = []) { $ch = curl_init(); curl_setopt($ch, CURLOPT_TIMEOUT, 5); curl_setopt($ch, CURLOPT_USERAGENT, "{$_SERVER['SERVER_NAME']}"); curl_setopt($ch, CURLOPT_URL, $url); if(is_array($opts) && $opts) { foreach($opts as $key => $val) { curl_setopt($ch, $key, $val); } } curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); if(FALSE === ($retval = curl_exec($ch))) { error_log(curl_error($ch)); } else { return $retval; } }
Melewati string User Agent yang tidak kosong adalah praktik yang baik, dan terkadang diharuskan untuk menghindari permintaan Anda diblokir.
4. Beberapa contoh
Dalam contoh ini kita bisa mengatasi antarmuka IPv6 buggy di Facebook dengan memaksa koneksi berlangsung di atas IPv4.<?PHP $endpoint = "https://graph.facebook.com/?id=" . urlencode($uri); $curlopts = [ CURLOPT_IPRESOLVE => CURL_IPRESOLVE_V4 ]; $retval = http_get_contents($endpoint, $curlopts); ?>
Mengambil dan mengurai header respons Apache untuk permintaan HTTP:
<?PHP function read_header($ch, $string) { // function to receive and process the respons headers } $tmp = http_get_contents($url, [ CURLOPT_HEADERFUNCTION => __NAMESPACE__ . '\read_header', CURLOPT_NOBODY => true ]); ?>
Perhatikan bahwa dalam semua kasus, konstanta CURLOPT_ * tidak boleh dikutip. Mereka bukan string, tapi sebenarnya bilangan bulat 'lama'.
5. Kode Lengkap (Bila Digabung) :
Alternatif 1<?php function http_get_contents($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_TIMEOUT, 1); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); if(FALSE === ($retval = curl_exec($ch))) { error_log(curl_error($ch)); } else { return $retval; } } $getcontents = preg_match("/^http/", $url) ? http_get_contents($url) : file_get_contents($url); echo $getcontents; ?>
Comments
Post a Comment
Bila Ada posting yang kurang, atau error atau yang lainnya, silahkan tinggalkan komentar agar artikel/post di perbaiki.
Jangan Lupa Cek Box "Notify Me" agar tahu komentar kamu dibalas oleh saya.
If there are any posts that are missing, or error or anything else, please leave a comment for the article / post to be fixed.
Do not Forget Check Box "Notify Me" to know our comments replied by me.