allow_url_fopen Yahoo Messenger Status
Dec 06

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

PHP:
  1. fopen ("http://namadomain.com/path/ke/rssfeeds/","r");

tidak 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:
  1. //beri nama rss.function.php
  2. $channel = array();
  3. $defwrite = "";
  4. $main = "";
  5. $min = 0;
  6. function awal($parser, $nama, $attrb) {
  7. global $channel, $defwrite, $main;
  8. if($nama == "RSS" || $nama == "RDF:RDF" || $nama == "ITEMS"){
  9.     $defwrite = "";
  10. } elseif($nama == "CHANNEL"){
  11.     $main = "CHANNEL";
  12. } elseif ($nama == "IMAGE"){
  13.     $main = "IMAGE";
  14.     $channel["IMAGE"] = array();
  15. } elseif ($nama == "ITEM"){
  16.     $main = "ITEMS";
  17. } else {
  18.     $defwrite = $nama;
  19. }
  20. }
  21.  
  22. function akhir($parser, $nama) {
  23. global $channel, $defwrite, $min;
  24. $defwrite = "";
  25. if ($nama == "ITEM") {
  26.     $min++;
  27. }
  28. }
  29.  
  30. function karakter($parser, $data) {
  31. global $channel, $defwrite, $main, $min;
  32. if ($defwrite != "") {
  33.     if ($main == "CHANNEL"){
  34.         if (isset($channel[$defwrite])){
  35.             $channel[$defwrite] .= $data;
  36.         } else {
  37.             $channel[$defwrite] = $data;
  38.         }
  39.     } elseif ($main == "IMAGE"){
  40.         if (isset($channel[$main][$defwrite])){
  41.             $channel[$main][$defwrite] .= $data;
  42.         } else {
  43.             $channel[$main][$defwrite] = $data;
  44.         }
  45.     } elseif ($main == "ITEMS"){
  46.         if (isset($channel[$main][$min][$defwrite])){
  47.             $channel[$main][$min][$defwrite] .= $data;
  48.         } else {
  49.             $channel[$main][$min][$defwrite] = $data;
  50.         }
  51.     }
  52. }
  53. }
  54.  
  55. function parse($url){
  56. $runparser = xml_parser_create();
  57. xml_set_element_handler($runparser, "awal", "akhir");
  58. xml_set_character_data_handler($runparser, "karakter");
  59.  
  60. $ch = curl_init();
  61. $timeout = 5;
  62. curl_setopt ($ch, CURLOPT_URL, $url);
  63. curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
  64. curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  65. $output = curl_exec($ch);
  66. curl_close($ch);
  67.  
  68. xml_parse_into_struct($runparser, $output, $vals, $index);
  69. xml_parser_free($runparser);
  70.  
  71. }

Dibawah ini adalah cara untuk menggunakan function diatas:

PHP:
  1. //include dengan relative path
  2. include ("rss.function.php");
  3. //baca rss feed pada rumahweb.com/journal
  4. parse('http://www.rumahweb.com/journal/feed/');
  5. //maksimal feed yang dibaca
  6. $max = 10;
  7. if (isset($channel["ITEMS"])) {
  8. if (count($channel["ITEMS"])> 0) {
  9. for($i = 0;$i <$max;$i++) {
  10. if (isset($channel["ITEMS"][$i]["LINK"])) {
  11.     echo "<h2><a href='".$channel["ITEMS"][$i]["LINK"] ."'>".$channel["ITEMS"][$i]["TITLE"]."</a>";
  12. } else {
  13.     echo "<h2>".$channel["ITEMS"][$i]["TITLE"]."</h2>";
  14. }
  15. echo $channel["ITEMS"][$i]["DESCRIPTION"];
  16. }
  17. } else {
  18. print ("Feed tidak ditemukan");
  19. }
  20. }

Hasilnya, dapat dilihat di sini

Selamat Mencoba.. :)

Leave a Reply

You must be logged in to post a comment.