从多个 curl 请求向数组添加值
Adding values to array from multiple curl requests
我目前正在使用 php-curl-class 并且我正在尝试从 JSON 响应创建一个 url 数组,这些响应与我下面代码中的错误代码相匹配。我最近的尝试是使用 array_push,这导致 url 创建了一个像这样的相同 url 的数组。
Array
(
[0] => http://example.com
[1] => http://example.com
)
我想要实现的是这样的。
Array
(
[0] => http://example.com
[1] => http://example2.com
[2] => http://example3.com
[3] => http://example4.com
)
我的代码:
require __DIR__ . '/vendor/autoload.php';
use \Curl\MultiCurl;
$curl_opts = [
CURLOPT_VERBOSE=> true
];
$out = array();
$errors = array();
$multi_curl = new MultiCurl();
$multi_curl->success(function ($instance) use (&$con, $out, $errors) {
$out[$instance->out] = $instance->response;
foreach ($out as $output){
$error = $output->error;
$p_id = $output->p_id;
if (isset($error) && $error == '2'){
echo '2 error';
$errors[] = $instance->url;
array_push($errors, $instance->url);
}
}
print_r($errors);
});
foreach($curl_opts as $key=>$value)
$multi_curl->setOpt($key, $value);
$multi_curl->complete(function($instance){
echo 1;
});
$multi_curl->addGet('http://example.com');
$multi_curl->addGet('http://example2.com');
$multi_curl->addGet('http://example3.com');
$multi_curl->addGet('http://example4.com');
$multi_curl->setConcurrency(3);
$multi_curl->start();
var_dump($multi_curl);
有人有什么建议吗?谢谢
我明白了。我过去使用 RollingCurl 时遇到过同样的问题。我忘了在success函数的数组开头加上&。
而不是这个:
$multi_curl->success(function ($instance) use (&$con, $out, $errors)
应该是这样的:
$multi_curl->success(function ($instance) use (&$con, &$out, &$errors)
如果你想访问循环外的值,你必须像我刚才展示的那样在你的变量之前定义 &
。我不知道其他方法,如果有人知道更好的东西,我会很高兴听到它。
我目前正在使用 php-curl-class 并且我正在尝试从 JSON 响应创建一个 url 数组,这些响应与我下面代码中的错误代码相匹配。我最近的尝试是使用 array_push,这导致 url 创建了一个像这样的相同 url 的数组。
Array
(
[0] => http://example.com
[1] => http://example.com
)
我想要实现的是这样的。
Array
(
[0] => http://example.com
[1] => http://example2.com
[2] => http://example3.com
[3] => http://example4.com
)
我的代码:
require __DIR__ . '/vendor/autoload.php';
use \Curl\MultiCurl;
$curl_opts = [
CURLOPT_VERBOSE=> true
];
$out = array();
$errors = array();
$multi_curl = new MultiCurl();
$multi_curl->success(function ($instance) use (&$con, $out, $errors) {
$out[$instance->out] = $instance->response;
foreach ($out as $output){
$error = $output->error;
$p_id = $output->p_id;
if (isset($error) && $error == '2'){
echo '2 error';
$errors[] = $instance->url;
array_push($errors, $instance->url);
}
}
print_r($errors);
});
foreach($curl_opts as $key=>$value)
$multi_curl->setOpt($key, $value);
$multi_curl->complete(function($instance){
echo 1;
});
$multi_curl->addGet('http://example.com');
$multi_curl->addGet('http://example2.com');
$multi_curl->addGet('http://example3.com');
$multi_curl->addGet('http://example4.com');
$multi_curl->setConcurrency(3);
$multi_curl->start();
var_dump($multi_curl);
有人有什么建议吗?谢谢
我明白了。我过去使用 RollingCurl 时遇到过同样的问题。我忘了在success函数的数组开头加上&。
而不是这个:
$multi_curl->success(function ($instance) use (&$con, $out, $errors)
应该是这样的:
$multi_curl->success(function ($instance) use (&$con, &$out, &$errors)
如果你想访问循环外的值,你必须像我刚才展示的那样在你的变量之前定义 &
。我不知道其他方法,如果有人知道更好的东西,我会很高兴听到它。