我有一个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)
无论如何都要去,如果这行失败然后显示所以错误信息不会使网站看起来凌乱吗?
答案 0 :(得分: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 ....
}
答案 1 :(得分:0)
您可以使用Traversable
界面
Traversable接口:用于检测类是否可以使用foreach遍历的接口。
所以在你的情况下,在foreach之前:
if ($result->data instanceof Traversable) {
// can use foreach
}