News:

Want to get involved in developing SMF? Why not lend a hand on our GitHub!

Main Menu

Php file_get_contents() hakkında

Started by Özgür, January 05, 2009, 12:22:14 PM

Previous topic - Next topic

Özgür

SMFye last.fm le alakalı bir modül buldum. Son dinlediğin şarkıyı profilinde göstermeye yarıyor. Ama fonksiyondaki "file_get_contents()" sunucumda çalışmıyor. Böyle oluncada fonksiyon hiçbirşeye yaramıyor çok derin bilgim yok php konusunda ama başka bir fonksiyonla değiştirilerek çözülebilir sanırım.

displaytemplateye eklediğim kod şu


// last.fm listening mod WRITTEN BY MALPERCIO
     // We need to determine what their last.fm username is
      $lastuser = @mysql_result(mysql_query("SELECT value FROM TABLEPREFIX_themes WHERE variable='last' AND id_member='" .  $message['member']['id'] . "'"),0);
      // Do they have a last.fm username?
       $emptyornot = empty($lastuser);
       
     // And now to display what the user is listening to.
      if( $emptyornot != 1)
      {
       $webaddress = "http://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user=$lastuser&api_key=APIKEY&limit=1";
       $html337 = file_get_contents("$webaddress");
       echo "Recent Track:";
       echo "<br>";
       $listeningsong = getTextBetweenTags('name', $html337, 1);
       foreach( $listeningsong as $name123 )
       {
         echo "$name123" ;
       }
       echo " - ";
       $listeningartist = getTextBetweenTags('artist', $html337, 1);
       foreach( $listeningartist as $name123 )
       {
          echo "$name123" ;
       }
      }


Çalışması için index.template ye eklediğim kodsa şu

// last.fm Listening mod WRITTEN BY MALPERCIO

// We'll need this to grab the text between tags...
function getTextBetweenTags($tag, $html, $strict=0)
{
  // a new dom object
  $dom = new domDocument;
  // load the html into the object
  if($strict==1)
  {
    $dom->loadXML($html);
  }
  else
  {
    $dom->loadHTML($html);
  }
  // discard white space
  $dom->preserveWhiteSpace = false;
  // the tag by its tag name
  $content = $dom->getElementsByTagname($tag);
  //the array to return
  $out = array();
  foreach ($content as $item)
  {
    // add node value to the out array
    $out[] = $item->nodeValue;
  }
  // return the results
  return $out;
}



tabiki prefix ve lastfm api keyini düzenleyip ekliyorum. ama dediğim gibi sunucuda "allow_url_fopen off" durumunda
yardımcı olacaklara gerekirse phpinfo dosyamsa http://www.rockayseri.net/sad.php burada.

Değişmesi gereken kod displaytemplateye eklenen kod.
So Long

korn21

php.ini dosyasından,
; Whether to allow the treatment of URLs (like http:// or ftp://) as files.
allow_url_fopen = Off

kısmını On yapmanız lazım, aksi takdirde ftp ve web sitelerine bağlantı kuramaz php.
if ($evgili in $love)  {echo " <form method=\"POST\" action=\"blow_a_kiss\"> <input type=\"submit\" value=\"Kiss\" name=\"Love\"> </forrm>";} else { echo 'shut the *uck up'; die;}

Badboy

#2
Bu sorun bende de olmuştu Korn21 arkadaşımızın vermiş olduğu kodu denememe rağmen sonuç alamadım. Bende farklı bir kodla sorunumu çözüm. Sizinde işinize yarayabilir.

Aşağıdaki kodu sayfanıza ekleyin ve daha sonra lastfm ile ilgili kodunuzda bulunan file_get_contents kısımları curl_get_file_contents ile değiştirin.

function curl_get_file_contents($URL)
{
$c = curl_init();
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_URL, $URL);
$contents = curl_exec($c);
curl_close($c);

if ($contents) return $contents;
else return FALSE;
}
Nothing is true, everything is permitted.

Özgür

Teşekkürler korn21 ama ne yazıkki sunucum bu fonksiyonu şuan bulunduğum sunucuda açmayacağını ancak hostingi başka bir makinaya taşıtırsam açacağını söylüyor. tabiki bende bunu kabul etmiyorum bir sürü iş çıkacak başıma. diğer yandan geçeceğim makina apache ben litespeedden gayet memnunum.  php.ini ile ve httaccess lede açılmıyor yani denedim ama birşey değişmedi.

Teşekkürler Badboy. Bu haliyle çalıştı.
So Long

korn21

function curl_get_file_contents($URL)
{
$c = curl_init();
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_URL, $URL);
$contents = curl_exec($c);
curl_close($c);

if ($contents) return $contents;
else return FALSE;
}

// last.fm listening mod WRITTEN BY MALPERCIO
     // We need to determine what their last.fm username is
      $lastuser = @mysql_result(mysql_query("SELECT value FROM TABLEPREFIX_themes WHERE variable='last' AND id_member='" .  $message['member']['id'] . "'"),0);
      // Do they have a last.fm username?
       $emptyornot = empty($lastuser);
       
     // And now to display what the user is listening to.
      if( $emptyornot != 1)
      {
       $webaddress = "http://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user=$lastuser&api_key=APIKEY&limit=1";
       $html337 = curl_get_file_contents("$webaddress");
       echo "Recent Track:";
       echo "<br>";
       $listeningsong = getTextBetweenTags('name', $html337, 1);
       foreach( $listeningsong as $name123 )
       {
         echo "$name123" ;
       }
       echo " - ";
       $listeningartist = getTextBetweenTags('artist', $html337, 1);
       foreach( $listeningartist as $name123 )
       {
          echo "$name123" ;
       }
      }


yukarıda script badboy arkadaşımzızın vermiş olduğu curl fonksiyonuna çevrilmiş hali, curl php 5'den sonra otomatik gelmeye başladı aksi takdirde modu yine php.ini de ayarlamak lazım ";extension=php_curl.dll" başındaki ; kaldırarak modülü aktif edeblirsiniz php 5 üzeriyse zaten otomatik olarak açık geliyor. Şunu da belirteyim, host firmanız, file_get_contents 'i kapatmışsa büyük ihtimalle bot çalişmasını engellemeye çalişmiş, botlar genelde mysqli ve işlemci kaynaklarını yorar, curl'da büyük ihtimalle kapatılmıştır, denemenizde yinede fayda var.
if ($evgili in $love)  {echo " <form method=\"POST\" action=\"blow_a_kiss\"> <input type=\"submit\" value=\"Kiss\" name=\"Love\"> </forrm>";} else { echo 'shut the *uck up'; die;}

Özgür

curl_get_file_contents e çevirince çalışıyor. php 5.2.6 cURL zaten var. allow fopen url kapalı file_get_content açık da olsa birşeye yaramıyor yani, adrese gitmeden içeriği alamayacağı için yolda bırakıyor beni. her neyse sorun çözüldü.

Tekrar teşekkürler.
So Long

korn21

özgür bilginde olsun bu script çok bandwith harcar bence :)
if ($evgili in $love)  {echo " <form method=\"POST\" action=\"blow_a_kiss\"> <input type=\"submit\" value=\"Kiss\" name=\"Love\"> </forrm>";} else { echo 'shut the *uck up'; die;}

Özgür

Valla yeni kurdum daha. Aklıma getirdiğin iyi oldu bir hafta bir takip edeyim fazla fark olmazsa devam ederim eğer normalin üstüne çıkarsa kaldırırım. 50 gb bw var aslında sorun değil ama bu yavaşlatırda siteyi bw harcıyorsa. hayırlısı =)
So Long

Advertisement: