PHP CURL调用始终显示NULL

时间:2017-08-20 07:42:56

标签: php curl

这个问题已经被问到了。但任何这些都不适合我。当CURL调用一直进行时,我得到NULL。

以下是我的 list_clients.php 文件。

<?php

require_once 'init.php';
header('Content-Type: application/json');
$clientResults  = mysqli_query($link, "SELECT * FROM clients");
$clients        = array();
while($client = mysqli_fetch_assoc($clientResults)){
    $clients[] = $client;
}
echo json_encode($clients);
exit;

所以上面的输出是:

[{"ip_address":"192.168.177.137","mac_address":"3a:1a:cf:7c:92:89","added_on":"2017-08-19 12:48:34"},{"ip_address":"192.168.177.137","mac_address":"3a:1a:cf:7c:92:89","added_on":"2017-08-20 08:09:29"}]

以下是我的 curl_call.php 文件

<?php
$url    = 'http://127.0.0.1/testing/list_clients.php';
$curl   = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_HTTPGET, TRUE);
curl_setopt($curl, CURLOPT_HEADER, 0);
//curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
//curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
                'Content-Type : application/json',
                'Accept: application/json'
        ));
$clientResult   = curl_exec($curl);
if($clientResult == FALSE) {
    var_dump(curl_error($curl));
}
curl_close($curl);

var_dump($clientResult); //For this line I am getting the following image eror

$clients        = json_decode($clientResult, TRUE);

var_dump($clients);

如果我var_dump($clientResult);,那么我收到以下错误

enter image description here

它一直显示 NULL 。可能导致错误的原因。

2 个答案:

答案 0 :(得分:1)

您错过了关于$ch的警告。这是未宣布的,但你在第17行引用它:

if($clientResult == FALSE) {
    var_dump(curl_error($ch));
}

(作为旁注,我使用=== FALSE,因此转换为FALSE的有效返回值不会错误地触发该代码。)

在处理错误(未能处理)之后,您也将继续执行。您看到的NULL可能是因为curl请求失败。

更正代码中的拼写错误并在出现错误时停止(或适当地执行):

if($clientResult == FALSE) {
    var_dump(curl_error($curl));
    exit();
}

更新OP以更新

可能返回NULL的另一个原因是因为响应无效jsonCheck the PHP documentation

  

以适当的PHP类型返回json中编码的值。值   true,false和null返回为TRUE,FALSE和NULL   分别。如果json无法解码或者如果是,则返回NULL   编码数据比递归限制更深。

您正在调试的HTML输出显示(在您的问题更新中)不会解析为JSON

答案 1 :(得分:0)

刚才想通了。如果我在 curl_call.php 中评论以下代码行,它将正常工作。

<?php
$url    = 'http://127.0.0.1/testing/list_clients.php';
$curl   = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_HTTPGET, TRUE);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
/* curl_setopt($curl, CURLOPT_HTTPHEADER, array(
                'Content-Type : application/json',
                'Accept: application/json'
        )); */
$clientResult   = curl_exec($curl);
if($clientResult == FALSE) {
    var_dump(curl_error($curl));
}
curl_close($curl);
var_dump($clientResult);
$clients        = json_decode($clientResult);

var_dump($clients);