2011-05-13 75 views
0

我有這樣的功能:http://pastebin.ca/2058418PHP/HTML/MySQL的URL緩存問題

它基本上是檢查是否一個表包含一些網址,以一個樂隊的照片。如果是這樣,那麼它會隨機排列表格,選擇第一個結果,然後輸出html代碼來插入圖片。如果表格沒有該特定區段的圖片,那麼它下載一個包含圖片URL的XML文件,解析XML並插入到表格中,然後像之前一樣獲取圖片的HTML代碼。

在html輸出中,無法判斷圖像URL是否被緩存。但是,當圖像URL被緩存(第一次)時,您使用的任何網絡瀏覽器都不會顯示圖像。 HTML很好 - 圖像鏈接正確。

你有什麼想法嗎?包含此功能的現場版本位於:http://redfern.me/similar/。我剛剛清空了表,所以不應該有很多緩存的URL。嘗試選擇一個樂隊,然後查看圖片是否加載。您可以通過查看頁面底部來判斷URL是否在緩存中。

回答

2

基本上看起來像你第一次獲取圖像後沒有返回。

<?php function getimage($artist){ 
     $api_key = "XXXXXXXXX"; 
     $iquery = mysql_query("SELECT url FROM `images` WHERE artist = '".$artist."' ORDER BY RAND() LIMIT 1"); 
     if($artist != ""){ 
      $artist = str_replace(" ", "+", $artist); 
      if(mysql_num_rows($iquery) == 0){ 
       $url = "http://developer.echonest.com/api/v4/artist/images?format=xml&api_key=".$api_key."&name=".$artist."&results=20"; 
       $data = file_get_contents($url); 
       if($data=false){return 'Error Getting Image';} 

       $images = new SimpleXMLElement($data); 

       foreach($images as $image){ 
        foreach($image->image as $indimage){ 
         $insiquery = "INSERT INTO images (id, artist, url) VALUES (NULL, '$artist','".$indimage->url."')"; 
         mysql_query($insiquery); 
        } 
       } 
       return "<img src=\"".$indimage->url."\" alt=\"$artist image\" />"; 
      }else{ 
       $imgurl = mysql_fetch_array($iquery); 
       return"<img src=\"".$imgurl['url']."\" alt=\"$artist image\" />"; 
      } 

     } 
     else{ 
      return"Image Aquire Function Error: <i>No Band Specified</i>"; 
     } 
     return null; 
    }?> 


echo getimage('Britney Spears'); 
+0

謝謝。我是一個白癡 - 當我檢查頁面的源代碼(使用chrome)時,Chrome瀏覽器再次加載頁面 - 緩存版本!我添加了$ iquery = mysql_query(「SELECT url FROM'images' WHERE artist ='」。$ artist。「'ORDER BY RAND()LIMIT 1」); 再次在行被回顯的位置之前,並且全部都被排序。 – 2011-05-13 17:14:54

1

這只是因爲當你進入到 「XML叫」 你的VAR 「$ imgUrl的[0]」 是空的:

嘗試這樣的事:

$images = new SimpleXMLElement($data); 
$xmlImgUrl = array(); 
foreach($images as $image){ 
    foreach($image->image as $indimage){ 
     $xmlImgUrl[] = $indimage->url; 
     $insiquery = "INSERT INTO images (id, artist, url) VALUES (NULL, '$artist','".$indimage->url."')"; 
     mysql_query($insiquery); 
    } 
} 
} 
$imgurl = $nrows == 0 ? $xmlImgUrl : mysql_fetch_row($iquery); 
if(!empty($imgurl)) echo "<img src=\"".$imgurl[0]."\" alt=\"$artist image\">"; 

其實例當mysql中沒有結果時,圖像url的數組。

+0

謝謝!正如我在對另一個答案的評論中所說 - 我是一個白癡。當我檢查頁面的源代碼時,chrome重新加載了包含緩存URL的頁面。如果我可以接受這兩個答案,那麼我會! (你的代碼也讓我意識到我需要整理我的代碼......) – 2011-05-13 17:16:40