Penggunaan CURL (Client URL Library) merupakan opsi terbaik yang dapat digunakan ketika setting allow_url_fopen diset off.
Curl merupakan salah satu library yang sudah didukung penggunaannya oleh PHP. Referensi mengenai Curl dan PHP : http://us2.php.net/curl
allow_url_fopen Off
Yap, ketika setting allow_url_fopen diset off, maka
fopen ("http://namadomain.com/path/ke/rssfeeds/","r");
Ttidak akan bisa digunakan untuk membuka dan membaca Rss Feed dari URL lain. Lalu bagaimana cara mengakalinya ?Gunakan CURL, dan berikut code snippet untuk membaca Rss Feed.
[php]
//beri nama rss.function.php
$channel = array();
$defwrite = "";
$main = "";
$min = 0;
function awal($parser, $nama, $attrb) {
global $channel, $defwrite, $main;
if($nama == "RSS" || $nama == "RDF:RDF" || $nama == "ITEMS"){
$defwrite = "";
} elseif($nama == "CHANNEL"){
$main = "CHANNEL";
} elseif ($nama == "IMAGE"){
$main = "IMAGE";
$channel["IMAGE"] = array();
} elseif ($nama == "ITEM"){
$main = "ITEMS";
} else {
$defwrite = $nama;
}
}
function akhir($parser, $nama) {
global $channel, $defwrite, $min;
$defwrite = "";
if ($nama == "ITEM") {
$min++;
}
}
function karakter($parser, $data) {
global $channel, $defwrite, $main, $min;
if ($defwrite != "") {
if ($main == "CHANNEL"){
if (isset($channel[$defwrite])){
$channel[$defwrite] .= $data;
} else {
$channel[$defwrite] = $data;
}
} elseif ($main == "IMAGE"){
if (isset($channel[$main][$defwrite])){
$channel[$main][$defwrite] .= $data;
} else {
$channel[$main][$defwrite] = $data;
}
} elseif ($main == "ITEMS"){
if (isset($channel[$main][$min][$defwrite])){
$channel[$main][$min][$defwrite] .= $data;
} else {
$channel[$main][$min][$defwrite] = $data;
}
}
}
}
function parse($url){
$runparser = xml_parser_create();
xml_set_element_handler($runparser, "awal", "akhir");
xml_set_character_data_handler($runparser, "karakter");
$ch = curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$output = curl_exec($ch);
curl_close($ch);
xml_parse_into_struct($runparser, $output, $vals, $index);
xml_parser_free($runparser);
}
[/php]
Dibawah ini adalah cara untuk menggunakan function diatas:
[php]
//include dengan relative path
include ("rss.function.php");
//baca rss feed pada rumahweb.com/journal
parse('https://www.rumahweb.com/journal/feed/');
//maksimal feed yang dibaca
$max = 10;
if (isset($channel["ITEMS"])) {
if (count($channel["ITEMS"]) > 0) {
for($i = 0;$i < $max;$i++) { if (isset($channel["ITEMS"][$i]["LINK"])) { echo "
<h2><a href="".$channel["ITEMS"][$i]["LINK"] ."">".$channel["ITEMS"][$i]["TITLE"]."</a>";
} else {
echo "</h2>
<h2>".$channel["ITEMS"][$i]["TITLE"]."</h2>
";
}
echo $channel["ITEMS"][$i]["DESCRIPTION"];
}
} else {
print ("Feed tidak ditemukan");
}
}
[/php]
Hasilnya, dapat dilihat di sini.
Selamat Mencoba.. 🙂