我尝试执行多路径请求并保留有关已发送数据的信息(通过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,添加句柄,执行它们并删除。之后我添加了其他句柄,并在执行后获得了空结果(但是发送了对服务器的请求)。 每当我关闭并重新打开多个数据时,我就会解决问题。 对不起,提出错误的问题= /
希望如果有人遇到同样的问题会有所帮助。
答案 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);