在PHP中使用curl时无法获得任何响应

在PHP中使用curl时无法获得任何响应,php,curl,Php,Curl,我使用php中的curl获取数据,但如果存在大量数据,它将返回0输出。我在下面提供我的代码 $result = array(); // multi handle $mh = curl_multi_init(); $idArr=[2,147,92]; foreach ($idArr as $key => $value) { $fetchURL = "http://example.com/index.php/rest/V1/categories/".$value."/products

我使用php中的
curl
获取数据,但如果存在大量数据,它将返回0输出。我在下面提供我的代码

 $result = array();
// multi handle
$mh = curl_multi_init();
$idArr=[2,147,92];
foreach ($idArr as $key => $value) {
    $fetchURL = "http://example.com/index.php/rest/V1/categories/".$value."/products/";
    //echo $fetchURL.'<br>';
    $multiCurl[$key] = curl_init();
    curl_setopt($multiCurl[$key], CURLOPT_URL,$fetch_url);
    curl_setopt($multiCurl[$key], CURLOPT_CUSTOMREQUEST, "GET");
    curl_setopt($multiCurl[$key], CURLOPT_HEADER,array("Content-Type: application/json", "Authorization: Bearer " . json_decode($token)));
    curl_setopt($multiCurl[$key], CURLOPT_RETURNTRANSFER,true);
    curl_multi_add_handle($mh, $multiCurl[$key]);
}
$index=null;
do {
  curl_multi_exec($mh,$index);
} while($index > 0);
// get content and remove handles
foreach($multiCurl as $k => $ch) {
  $result[$k] = curl_multi_getcontent($ch);
  curl_multi_remove_handle($mh, $ch);
}
// close
curl_multi_close($mh);
print_r($result);
$result=array();
//多手柄
$mh=curl_multi_init();
$idArr=[2147,92];
foreach($idArr作为$key=>$value){
$fetchURL=”http://example.com/index.php/rest/V1/categories/“$value。”/products/”;
//回显$fetchURL。“
”; $multiCurl[$key]=curl_init(); curl_setopt($multiCurl[$key],CURLOPT_URL,$fetch_URL); curl_setopt($multiCurl[$key],CURLOPT_CUSTOMREQUEST,“GET”); curl_setopt($multiCurl[$key],CURLOPT_头,数组(“内容类型:application/json”,“授权:Bearer.json_decode($token))); curl_setopt($multiCurl[$key],CURLOPT_RETURNTRANSFER,true); curl_multi_add_句柄($mh,$multiCurl[$key]); } $index=null; 做{ curl_multi_exec($mh,$index); }而($index>0); //获取内容并删除句柄 foreach($k=>$ch的多URL){ $result[$k]=curl\u multi\u getcontent($ch); 卷曲多个拆卸手柄($mh,$ch); } //接近 卷曲多重闭合($mh); 打印(结果);

在这里,我必须传递多个请求并获得结果,但在这种情况下,没有结果。当我使用simple
curl
时,结果就来了。这里我的要求是减少响应时间。

您缺少“curl\u multi\u select”的实现。我已经为你做了,但没有测试。试一试

$result = array();
// multi handle
$mh = curl_multi_init();
$multiCurl = array();
$idArr=[2,147,92];
foreach ($idArr as $key => $value) {
$fetchURL = "http://example.com/index.php/rest/V1/categories/".$value."/products/";
//echo $fetchURL.'<br>';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$fetch_url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_HEADER,array("Content-Type: application/json", "Authorization: Bearer " . json_decode($token)));
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
$multiCurl[$key] = $ch;
curl_multi_add_handle($mh, $ch);
}

$active =null;
do {
  $mrc = curl_multi_exec($mh,$active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);

while ($active && $mrc == CURLM_OK) {
  if (curl_multi_select($mh) != -1) {
    do {
        $mrc = curl_multi_exec($mh, $active);
    } while ($mrc == CURLM_CALL_MULTI_PERFORM);
  }
}   
foreach($multiCurl as $k => $ch) {
 $result[$k] = curl_multi_getcontent($ch);
 curl_multi_remove_handle($mh, $ch);
}
// close
curl_multi_close($mh);
print_r($result);
$result=array();
//多手柄
$mh=curl_multi_init();
$multiCurl=array();
$idArr=[2147,92];
foreach($idArr作为$key=>$value){
$fetchURL=”http://example.com/index.php/rest/V1/categories/“$value。”/products/”;
//回显$fetchURL。“
”; $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$fetch_URL); curl_setopt($ch,CURLOPT_CUSTOMREQUEST,“GET”); curl_setopt($ch,CURLOPT_头,数组(“内容类型:application/json”,“授权:Bearer.json_decode($token))); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); $multiCurl[$key]=$ch; 卷曲多加手柄($mh,$ch); } $active=null; 做{ $mrc=curl\u multi\u exec($mh,$active); }而($mrc==CURLM\u CALL\u MULTI\u PERFORM); 而($active&&$mrc==CURLM_OK){ 如果(卷曲多点选择($mh)!=-1){ 做{ $mrc=curl\u multi\u exec($mh,$active); }而($mrc==CURLM\u CALL\u MULTI\u PERFORM); } } foreach($k=>$ch的多URL){ $result[$k]=curl\u multi\u getcontent($ch); 卷曲多个拆卸手柄($mh,$ch); } //接近 卷曲多重闭合($mh); 打印(结果);
我认为您无法得到响应,因为在curl选项集中设置了错误的变量。您在foreach循环中的第三行应该是这样的

curl_setopt($multiCurl[$key], CURLOPT_URL,$fetchURL);
此外,您还为标题选项写入了错误的syntex,将CURLOPT_标题替换为CURLOPT_-HTTPHEADER

下面是一个工作完美的示例代码

$idArr=[20,18,21];

    $mh = curl_multi_init();
    $requests = array();

    $curl_objs_arr = [];
    foreach ($idArr as $key => $cat) {
        $fetchURL = "http:example.com/v2/products?category=".$cat;

        $requests[$key] = curl_init($fetchURL);

        curl_setopt($requests[$key], CURLOPT_URL,$fetchURL);
        curl_setopt($requests[$key], CURLOPT_CUSTOMREQUEST, "GET");
        curl_setopt($requests[$key], CURLOPT_HTTPHEADER,array("Content-Type: application/json","Authorization: Bearer " . json_decode($token)));
        curl_setopt($requests[$key], CURLOPT_RETURNTRANSFER,true);

        curl_multi_add_handle($mh, $requests[$key]);
    }

    $running = null;
    do {
       curl_multi_exec($mh, $running);
    } while($running > 0);

    foreach ($requests as $key => $request) {
        $result[$key] = curl_multi_getcontent($request);
        curl_multi_remove_handle($mh, $request);
    }
    curl_multi_close($mh);

    echo "<pre>";
    print_r($result);exit;
$idArr=[20,18,21];
$mh=curl_multi_init();
$requests=array();
$curl_objs_arr=[];
foreach($idArr作为$key=>$cat){
$fetchURL=“http:example.com/v2/products?category=”.$cat;
$requests[$key]=curl_init($fetchURL);
curl_setopt($requests[$key],CURLOPT_URL,$fetchURL);
curl_setopt($requests[$key],CURLOPT_CUSTOMREQUEST,“GET”);
curl_setopt($requests[$key],CURLOPT_HTTPHEADER,数组(“内容类型:application/json”,“授权:Bearer.json_decode($token)));
curl_setopt($requests[$key],CURLOPT_RETURNTRANSFER,true);
curl_multi_add_句柄($mh,$requests[$key]);
}
$running=null;
做{
curl_multi_exec($mh,$running);
}而($running>0);
foreach($key=>$request的请求){
$result[$key]=curl\u multi\u getcontent($request);
卷曲多重移除手柄($mh,$request);
}
卷曲多重闭合($mh);
回声“;
打印(结果);出口

这样设置代码,就可以解决您的问题

为什么json解码令牌?解码创建一个数组。我认为这不是你需要的。为什么
$multiCurl
是一个数组?
$i
来自哪里?现在,您似乎根本没有更改$i(甚至没有声明它)。所以它的数组部分没有意义。它现在继续写入同一个元素。@DirkScholten:很抱歉,我所做的更改仍然是同一个错误。@raina77ow:我按照您的要求进行了更改,但相同的结果(
数组([0]=>[1]=>[2]=>)
)即将出现。打印时没有错误消息。@delboy1978uk:token需要通过,当我使用simple
curl_init
时,它工作正常。它给出了不需要的输出。不,它给出了相同的问题。