Multicurl返回null而没有任何错误(multicurl多次使用)

时间:2016-02-17 11:10:48

标签: php curl

我尝试执行多路径请求并保留有关已发送数据的信息(通过GET)。我有阵列' $ params'包含我希望以多个卷发发送的参数:

SELECT * FROM 
    TID023_INTERVENTO t1 
      INNER JOIN TID031_PIANO t2 
      ON (t1.PRG_INT = t2.PRG_INT) 
WHERE 
      COD_TIP_STA_INT = 2 AND COD_TIP_BAN = 2;

有了这样的代码,我得到了: - 没有CURL错误(状态始终为0) - 有时结果还可以,我们得到了响应文本,有时没有(而且我们没有正文,也没有调试)

最后一件事 - 如果我将浏览muticurl中空的URL(或发送常规CURL),则响应是正确的。没有我可以遵循的模式,所以也许有人可以指出我做错了什么或我忘了做什么? = /

解决了:实际上问题并非我所期望的那样。我曾经使用过一次multicurl,添加句柄,执行它们并删除。之后我添加了其他句柄,并在执行后获得了空结果(但是发送了对服务器的请求)。 每当我关闭并重新打开多个数据时,我就会解决问题。 对不起,提出错误的问题= /

希望如果有人遇到同样的问题会有所帮助。

1 个答案:

答案 0 :(得分:0)

试试这段代码

    <?php

$params = [
  ['curl' => null, 'url' => "http://google.com"],
  ['curl' => null, 'url' => "http://google.com"],
];

$m_curl  = curl_multi_init();

for ($i = 0; $i < count($params); ++$i) {
    $params[$i]['curl'] = curl_init();
    curl_setopt($params[$i]['curl'], CURLOPT_HEADER, 1);
    curl_setopt($params[$i]['curl'], CURLOPT_VERBOSE, 1);
    curl_setopt($params[$i]['curl'], CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($params[$i]['curl'], CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($params[$i]['curl'], CURLOPT_URL, $params[$i]['url']);
    curl_multi_add_handle($m_curl, $params[$i]['curl']);
}

$active = null;
do {
    $status = curl_multi_exec($m_curl, $active);
    if ($status > 0) die ('ERROR!');
} while ($status == CURLM_CALL_MULTI_PERFORM);

while ($active && $status == CURLM_OK) {
    if (curl_multi_select($m_curl) != -1) {
        do {
            $status = curl_multi_exec($m_curl, $active);
        } while ($status == CURLM_CALL_MULTI_PERFORM);
    }
}

$result = [];
foreach ($params as $param) {
    $curl_result = curl_multi_getcontent($param['curl']);
    $header_size  = curl_getinfo($param['curl'], CURLINFO_HEADER_SIZE);
    $result[] = [
        "header" => substr($curl_result, 0, $header_size),
        "body" => substr($curl_result, $header_size)
    ];

    curl_multi_remove_handle($m_curl, $param['curl']);
}

curl_multi_close($m_curl);

var_dump($result);