PHP/HTML/mySQL URL缓存问题

PHP/HTML/mySQL URL缓存问题,php,mysql,html,caching,Php,Mysql,Html,Caching,我有这个功能: 它基本上检查一个表是否包含一些指向乐队图片的URL。如果它这样做了,那么它将随机对表进行排序,选择第一个结果,然后输出html代码以插入图片。如果表中没有该特定波段的图片,那么它将下载一个包含图像URL的XML文件,解析XML并插入表中,然后像前面一样获取图像的HTML代码 在html输出方面,您无法判断图像URL是否已缓存。但是,缓存图像URL(第一次)时,无论使用何种web浏览器,都不会显示图像。HTML很好-图像链接正确 你有什么想法吗?包含此功能的站点的实时版本位于此处:

我有这个功能:

它基本上检查一个表是否包含一些指向乐队图片的URL。如果它这样做了,那么它将随机对表进行排序,选择第一个结果,然后输出html代码以插入图片。如果表中没有该特定波段的图片,那么它将下载一个包含图像URL的XML文件,解析XML并插入表中,然后像前面一样获取图像的HTML代码

在html输出方面,您无法判断图像URL是否已缓存。但是,缓存图像URL(第一次)时,无论使用何种web浏览器,都不会显示图像。HTML很好-图像链接正确


你有什么想法吗?包含此功能的站点的实时版本位于此处:。我刚刚清空了表,所以应该没有太多缓存的URL。尝试选择一个波段,然后查看图像是否加载。您可以通过查看页面底部来判断URL是否在缓存位置。

基本上看,您在第一次获取图像后没有返回

 <?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');

基本上看,您在第一次获取图像后没有返回

 <?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');

这只是因为当您输入“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\">";
$images=新的simplexmlement($data);
$xmlImgUrl=array();
foreach($images作为$image){
foreach($image->image as$indimage){
$xmlImgUrl[]=$indimage->url;
$inseQuery=“在图像(id、艺术家、url)中插入值(NULL,$artist',“$indimage->url.”);
mysql_查询($insquery);
}
}
}
$imgurl=$nrows==0$xmlImgUrl:mysql\u fetch\u行($iquery);
如果(!empty($imgurl))回显“”;

当没有结果时,它会实例化一个图像URL数组。

这只是因为当您输入“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\">";
$images=新的simplexmlement($data);
$xmlImgUrl=array();
foreach($images作为$image){
foreach($image->image as$indimage){
$xmlImgUrl[]=$indimage->url;
$inseQuery=“在图像(id、艺术家、url)中插入值(NULL,$artist',“$indimage->url.”);
mysql_查询($insquery);
}
}
}
$imgurl=$nrows==0$xmlImgUrl:mysql\u fetch\u行($iquery);
如果(!empty($imgurl))回显“”;

当mysql中没有结果时,它会实例化一个图像URL数组。

谢谢。我是个白痴——当我检查页面的源代码(使用chrome)时,chrome再次加载页面——缓存版本!我添加了$iquery=mysql_查询(“从
images
WHERE-artist=”中选择url“$artist.”“ORDER BY RAND()LIMIT 1”);就在这一行被回应之前,一切都被整理好了。谢谢。我是个白痴——当我检查页面的源代码(使用chrome)时,chrome再次加载页面——缓存版本!我添加了$iquery=mysql_查询(“从
images
WHERE-artist=”中选择url“$artist.”“ORDER BY RAND()LIMIT 1”);再一次,就在这一行被回音的地方,一切都被整理好了。谢谢!正如我在对另一个答案的评论中所说的,我是个白痴。当我检查页面的源代码时,chrome正在重新加载包含缓存URL的页面。如果我能接受这两个答案,那么我就会接受!(你的代码也让我意识到我需要整理我的代码…)谢谢!正如我在对另一个答案的评论中所说的,我是个白痴。当我检查页面的源代码时,chrome正在重新加载包含缓存URL的页面。如果我能接受这两个答案,那么我就会接受!(你的代码也让我意识到我需要整理我的代码…)