【问题标题】:PHP CURL Error : Data returning NULL ValuePHP CURL 错误:数据返回 NULL 值
【发布时间】:2019-04-23 10:19:49
【问题描述】:

我有一个 JSON 代码,我将它放入名为 data.json 的 JSON 文件中

JSON 代码是:

[
 {"value":"23","date":"03/2018"},
 {"value":"43","date":"03/2019"},
 {"value":"34","date":"12/2017"},
 {"value":"13","date":"01/2019"},
 {"value":"34","date":"02/2019"}
]

现在我用来获取数据的 php 代码如下:

$url = "data.json" ;

$ch = curl_init() ;

curl_setopt($ch, CURLOPT_URL, $url) ;
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$result = curl_exec($ch);


curl_close($ch) ;


$data = json_decode($result, true) ;

foreach($data as $mydata)
{
  $data1 = $mydata["value"] ;
  $data2 = $mydata["date"] ;

echo $data1 ." : ". $data2 ;
echo "<br/>";

}

我不明白代码有什么问题,但它给出了错误警告

为 foreach() 提供的参数无效

发生这种情况是因为数据返回 NULL 值但我不知道我的 JSON 数据格式如何不正确。 格式看起来不错。但它仍然返回 NULL 值。

【问题讨论】:

  • 您是否在 $data 中获取数据?
  • console.log($result); 给你什么?
  • var_dump $data 看看里面有什么——当我直接使用你的 json 时,它对我有用
  • 你能把变量 $mydata 转储给我们看看吗
  • Var_dump($data) 给我 NULL 结果@rapaelec 但是为什么?

标签: php json curl foreach


【解决方案1】:

如果您使用的是CURL,而不是data.json,则必须提供 JSON 文件的完整 URL

http://localhost/text.json 

从 json 获取数据的其他选项

$result = file_get_contents($url);

【讨论】:

    【解决方案2】:

    这里的问题是:

    1- 你不能卷曲同一个主机,你必须使用函数 file_get_content() 来获取你的json:

    <?php
    
    $string = file_get_contents("./data.json");
    $data = json_decode($string, true);
    
    
    
    foreach($data as $mydata)
    {
      $data1 = $mydata["value"] ;
      $data2 = $mydata["date"] ;
    
    echo $data1 ." : ". $data2 ;
    echo "<br/>";
    
    }

    如果你想使用 curl ,它必须是另一个主机,例如:

    <?php
    
    $url = "http://date.jsontest.com" ;
    
    $ch = curl_init($url) ;
    
    $options = array(
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => array('Content-type: application/json')
    );
    
    curl_setopt_array( $ch, $options );
    $result = curl_exec($ch);
    
    curl_close($ch) ;
    
    $result = json_decode($result, 1);
    
    
    foreach($result as $key => $mydata)
    {
        echo $key ." : ". $mydata ;
        echo "<br/>";
    }

    所以这取决于你的 Json 的结构

    谢谢

    【讨论】:

      【解决方案3】:

      它对我来说很好用。请检查。

      <?php
            $url = "http://raveesh.rnd/data.json" ;
            $ch = curl_init() ;
      
            curl_setopt($ch, CURLOPT_URL, $url) ;
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
            $result = curl_exec($ch);
            curl_close($ch) ;
      
            $data = json_decode($result, true) ;
      
            foreach($data as $mydata)
            {
                 $data1 = $mydata["value"] ;
                 $data2 = $mydata["date"] ;
      
                 echo $data1 ." : ". $data2 ;
                 echo "<br/>";
            }
      ?>
      
      Output:
      
       23 : 03/2018
       43 : 03/2019
       34 : 12/2017
       13 : 01/2019
       34 : 02/2019
      

      【讨论】:

        【解决方案4】:

        当只使用带有文件名的 cUrl 时,cUrl 认为它是一个 url,所以你会得到错误

        curl: (6) Could not resolve host
        

        如果是本地文件,我会更喜欢使用 file_get_contents...

        $json = file_get_contents("file.json");
        put here your json decode and logic
        

        如果是url,则使用curl。

        为了回答和帮助你,让我们试着看看你是否从 curl 中得到任何错误......

        像这样更改代码并更新我们

        尝试使用 curl_error 并检查 cUrl 是否有任何错误,

        你得到了什么?

        $url = "data.json" ;
        $ch = curl_init() ;
        curl_setopt($ch, CURLOPT_URL, $url) ;
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
        $result = curl_exec($ch);
        
        if (curl_error($ch)) {
            $error_msg = curl_error($ch);
        }
        
        curl_close($ch) ;
        
        if (isset($error_msg)) {
            // TODO - Handle cURL error accordingly
        }
        
        // put here your json decode and logic
        

        【讨论】:

        • 我知道我做错了什么。当我在 $url 添加完整的 URL 路径时。我能够获取数据。但是你知道原因吗?
        • 我正在尝试帮助...首先检查错误...然后我们会更新并继续帮助您
        • 感谢您的帮助。我没有否决你的回答。但可能你的理由是正确的。在需要时使用 curl 是最佳实践
        • 请试试这个,让我们继续弄清楚。欢迎您投票:)
        • 我投了赞成票,但我的票不算数。让我试试这个例子
        猜你喜欢
        • 2014-03-27
        • 1970-01-01
        • 1970-01-01
        • 2013-02-26
        • 1970-01-01
        • 1970-01-01
        • 2014-08-30
        • 1970-01-01
        • 2012-01-01
        相关资源
        最近更新 更多