【问题标题】:Invalid argument supplied for foreach() in Instagram APIInstagram API 中为 foreach() 提供的参数无效
【发布时间】:2012-10-30 12:52:31
【问题描述】:

我正在为 Instagram 使用这种结构:

<?php
        // Supply a user id and an access token
        $userid = "--user--";
        $accessToken = "--token--";

        // Gets our data
        function fetchData($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;
        }

        // Pulls and parses data.
        $result = fetchData("https://api.instagram.com/v1/users/--user--/media/recent/?access_token=--token--");
        $result = json_decode($result);
    ?>


    <?php foreach ($result->data as $post): ?>
        <!-- Renders images. @Options (thumbnail,low_resoulution, high_resolution) -->
        <a class="group" rel="group1" href="<?= $post->images->standard_resolution->url ?>"><img src="<?= $post->images->thumbnail->url ?>"></a>
    <?php endforeach ?>

但是这个印刷品:

警告:在第 40 行的 /home/mysite/index.php 中为 foreach() 提供的参数无效

40.行:

<?php foreach ($result->data as $post): ?>

这个结构有什么问题?

这个结构是http://www.blueprintinteractive.com/blog/how-instagram-api-fancybox-simplified

【问题讨论】:

  • 在 foreach 结构之前使用 var_dump($result-&gt;data) 以了解有关 $result->data 对其无效参数的更多信息。
  • 很可能您的 JSON 解码失败并返回 false。你能把$result的文本值放在你的帖子里吗?您是否通过jsonlint 之类的方式运行$result 的文本值?
  • 结构没有问题,很可能$result-&gt;data包含无效数据(即不是数组,或者为空)。

标签: php instagram


【解决方案1】:

好的,只是检查一下 - 在您的代码中,您有 $userid = "--user--"$accessToken = "--token--",然后在 URL 中,您有 --user----token-- - 您将它们替换为 $userid 和 @987654326 @?如果不是,则问题可能只是 Instagram 正在返回一个错误,进而导致您的代码失败。

如果您已将上述情况考虑在内但仍然一无所获,则在循环之前打印 $result-&gt;data 的值 (var_dump($result-&gt;data)) 并查看您的变量包含什么。

如果上面没有显示任何内容,请尝试var_dump($result) - json_decode() 可能已失败并显示false

如果$result-&gt;data 是一个数组,而只是您没有数据(我不确定如果没有结果,Instagram 会返回什么),请在 @ 之前添加一个检查以查看数组是否为空987654333@循环。

<!-- This will output the contents of '$result->data' - let us know what it is -->
<?php var_dump($result->data)`) ?>

<?php if(!empty($result->data)): ?>
    <?php foreach ($result->data as $post): ?>
        <!-- Renders images. @Options (thumbnail,low_resoulution, high_resolution) -->
        <a class="group" rel="group1" href="<?= $post->images->standard_resolution->url ?>"><img src="<?= $post->images->thumbnail->url ?>"></a>
    <?php endforeach ?>
<?php endif ?>

【讨论】:

  • 解析错误:语法错误,第 45 行 /home/mysite/index.php 中的意外 T_ENDIF
  • 所以问题不在于您的代码,而在于fetchData() 返回的值。就在上面代码中的 if() 循环之前,添加 var_dump($result-&gt;data); - 这将告诉你 `$result->data 包含什么,我怀疑它什么都不是。
  • @DavidGard 对不起,我不明白你的意思。请编辑我的代码?
  • 已对我的代码进行了编辑,以显示var_dump() 的放置位置。
  • 好的,也就是说它不存在。在那一行,将$result-&gt;data 替换为$result,看看你会得到什么。
【解决方案2】:
<?php
        // Supply a user id and an access token
        $userid = "*****";
        $accessToken = "*********";

        // Gets our data
        function fetchData($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;
        }

        // Pulls and parses data.
        $result = fetchData("https://api.instagram.com/v1/users/$userid/media/recent/?access_token=$accessToken");
        $result = json_decode($result);
    ?>

<?php if(!empty($result->data)): ?>
    <?php foreach ($result->data as $post): ?>
        <!-- Renders images. @Options (thumbnail,low_resoulution, high_resolution) -->
        <a class="group" rel="group1" href="<?= $post->images->standard_resolution->url ?>"><img src="<?= $post->images->thumbnail->url ?>"></a>
    <?php endforeach ?>
<?php endif ?>

在一个在线编译器上试过了。

【讨论】:

    【解决方案3】:
    <?php foreach ($result->data as $post): ?>
        <!-- Renders images. @Options (thumbnail,low_resoulution, high_resolution) -->
        <a class="group" rel="group1" href="<?= $post->images->standard_resolution->url ?>"><img src="<?= $post->images->thumbnail->url ?>"></a>
    <?php endforeach ?>
    

    这是错误的语法 替换为:

    <?php foreach ($result->data as $post){ ?>
        <!-- Renders images. @Options (thumbnail,low_resoulution, high_resolution) -->
        <a class="group" rel="group1" href="<?= $post->images->standard_resolution->url ?>"><img src="<?= $post->images->thumbnail->url ?>"></a>
    <?php } ?>
    

    【讨论】:

    • 您能否解释一下为什么这有助于解决问题?
    • 仔细查看我上次发布的代码。问题出在 foreach 语法上。
    猜你喜欢
    • 2011-05-17
    • 2011-02-07
    相关资源
    最近更新 更多