PHP / HTML / MySQL URL Кеширование Проблема - PullRequest
0 голосов
/ 13 мая 2011

У меня есть эта функция: http://pastebin.ca/2058418

Он в основном проверяет, содержит ли таблица некоторые URL-адреса к изображениям группы. Если это так, то он упорядочит таблицу случайным образом, выберет первый результат, а затем выведет HTML-код для вставки изображения. Если в таблице нет изображений этой конкретной полосы, то она загружает файл XML, который содержит URL-адреса изображения, анализирует XML и вставляет в таблицу, а затем получает HTML-код для изображения, как раньше.

С точки зрения вывода html, вы не можете определить, был ли URL-адрес изображения кэширован или нет. ОДНАКО, когда URL-адрес изображения кэшируется (впервые), какой бы веб-браузер вы не использовали, изображение не будет отображаться. HTML в порядке - изображение связано правильно.

У вас есть идеи? Живая версия сайта, содержащая эту функцию, находится здесь: http://redfern.me/similar/. Я только что очистил таблицы, поэтому не должно быть много кэшированных URL. Попробуйте выбрать полосу, а затем посмотрите, загружается ли изображение. Вы можете определить, где находится URL-адрес, где он кэшируется или нет, взглянув внизу страницы.

Ответы [ 2 ]

2 голосов
/ 13 мая 2011

в основном выглядит так, как будто вы не возвращались после первого получения изображения.

 <?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');
1 голос
/ 13 мая 2011

Это просто потому, что когда вы вводите "вызов XML", ваша переменная "$ 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\">";

, который создает массив URL-адресов изображений, когда не приводит к mysql.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...