2011-05-13 45 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