2015-03-02 5 views
0

У меня есть этот код для ретривера изображения Instagram, он работает хорошо, но может сильно потерпеть неудачу.Если вы не справитесь, вы можете сделать другое заявление?

<table border="0" width="90%" cellspacing="0" cellpadding="0"> 
             <tr> 
              <td> 
<?php 
     function fetch_data($url){ 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_URL, $url); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($ch, CURLOPT_TIMEOUT, 20); 
     $result = curl_exec($ch); 
     curl_close($ch); 
     return $result; 
    } 

    $access_token = "xxx.xxx.xxx"; 
    $display_size = "standard_resolution"; 

    $number_of_images = 7; 

    $result = fetch_data("https://api.instagram.com/v1/users/[user]/media/recent/?count={$number_of_images}&access_token={$access_token}"); 
    $result = json_decode($result); 

    $images = array(); 
    foreach($result->data as $photo) 
{ 
    $images[] = array(
     'url' => $photo->images->{$display_size}->url, 
     'link' => $photo->link, 
    ); 
} 
?> 
<a href="<?php echo $images[0]['link']; ?>" target="new"><img src="<?php echo $images[0]['url']; ?>" border="0" height="200" width="200" /></td> 
             </tr> 
             <tr> 
              <td><a href="<?php echo $images[1]['link']; ?>" target="new"><img src="<?php echo $images[1]['url']; ?>" border="0" height="200" width="200" /></a></td> 
             </tr> 
            </table> 
            </td> 
            <td><a href="<?php echo $images[2]['link']; ?>" target="new"><img src="<?php echo $images[2]['url']; ?>" border="0" height="400" width="400" /></a></td> 
            <td valign=top> 
            <table border="0" width="100%" cellspacing="0" cellpadding="0"> 
             <tr> 
              <td><a href="<?php echo $images[3]['link']; ?>" target="new"><img src="<?php echo $images[3]['url']; ?>" border="0" height="200" width="200" /></a></td> 
             </tr> 
             <tr> 
              <td><a href="<?php echo $images[4]['link']; ?>" target="new"><img src="<?php echo $images[4]['url']; ?>" border="0" height="200" width="200" /></a></td> 
             </tr> 
            </table> 
            </td> 
            <td valign=top> 
            <table border="0" width="100%" cellspacing="0" cellpadding="0"> 
             <tr> 
              <td> <a href="<?php echo $images[5]['link']; ?>" target="new"><img src="<?php echo $images[5]['url']; ?>" border="0" height="200" width="200" /></a></td> 
             </tr> 
             <tr> 
              <td><a href="<?php echo $images[6]['link']; ?>" target="new"><img src="<?php echo $images[6]['url']; ?>" border="0" height="200" width="200" /></a></td> 
             </tr> 
            </table> 
            </td> 
           </tr> 
          </table> 
          </td> 
         </tr> 
        </table> 
        </td> 
       </tr> 
      </table> 
      </td> 
     </tr> 
    </table> 

Так что, когда-либо этот сценарий умирает, он говорит, что не будет работать на линии 57, которая линии 57 является

foreach($result->data as $photo) 

будет в любом случае, чтобы идти, если не удается это строка, то показать, так сообщение об ошибке не делает сайт выглядит грязным?

+1

какую ошибку вы получаете? –

+0

Возможно, блок try catch finally поможет вам с этим – igavriil

+0

'Примечание: неопределенное свойство: stdClass :: $ data в /home/content/90/9753290/html/bottom.php в строке 57' и ' Warning: Invalid аргумент, предоставленный foreach() в /home/content/90/9753290/html/bottom.php в строке 57', - это сообщения об ошибках, которые я получаю, когда он умирает lol –

ответ

0

foreach работает только с array или objects, все остальное создает Ошибка.
Это не исключение: окружающий его try/catch блок не будет иметь эффектов.

В вашем случае вы должны сделать так:

if (is_array ($result->data) || 
    is_object ($result->data)) { 

foreach ($result->data as $photo) { 
    $images[] = array ('url' => $photo->images->{$display_size}->url, 
         'link' => $photo->link); 
    // Note that i have removed a comma after $photo->link 
} 
}else { 
    // can not loop .... 
} 
+0

yep получил это, работая с этим, спасибо –

0

Вы можете использовать Traversable интерфейса

Traversable интерфейсной: интерфейс для обнаружения, если класс проходимый с помощью Еогеаспа.

Так что в вашем случае, перед Еогеасп:

if ($result->data instanceof Traversable) { 
    // can use foreach 
} 
Смежные вопросы