当前位置: 首页 > 工具软件 > QueryList > 使用案例 >

php querylist 404,Querylist批量采集碰到404咋办

段干昊然
2023-12-01

1、tp框架搭配querylist 使用CurlMulti插件 多线程执行后在执行一段时间后出现404

2、环境 php nginx mysql 数据量不小(本来用的apache,后来动不动服务器500,代码超时时间都设置了,不行就切换nginx)

3、相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

如下如果这个url 404 那么往后就不执行了 其实我加了判断来着

public function makeids()

{

$index = input('param.index');//接收id用于半自动采集

$last = input('param.last');//接收id用于半自动采集

set_time_limit(3600);

$urlmake = [];

$ql = QueryList::getInstance();

for ($i = $index; $i <=$last; $i++) {

for ($j = $i . '000'; $j <= $i . '999'; $j++) {

if (ISCESHI){

$url = LOCALURL."/index.php/index/index/getlists/id/" . $i . '_' . $j;

}else{

$url = SERVICE."/index.php/index/index/getlists/id/" . $i . '_' . $j;

}

$urlmake [] = $url;

if(count($urlmake)>=5){

$ql->use(CurlMulti::class);

$ql->curlMulti($urlmake)

->success(function (QueryList $ql, CurlMulti $curl, $r) {

echo "Current url:{$r['info']['url']} \r\n";

// if (!empty($r)){

$this->getlists($r['info']['url']);

// }

unset($urlmake);

$ql->destruct();

})

->start([

// 最大并发数,这个值可以运行中动态改变。

'maxThread' => 1999,

// 触发curl错误或用户错误之前最大重试次数,超过次数$error指定的回调会被调用。

'maxTry' => 3,

// 全局CURLOPT_*

'opt' => [

CURLOPT_TIMEOUT => 3600,

// CURLOPT_CONNECTTIMEOUT => 1,

CURLOPT_CONNECTTIMEOUT => 0,

CURLOPT_RETURNTRANSFER => true

],

// 缓存选项很容易被理解,缓存使用url来识别。如果使用缓存类库不会访问网络而是直接返回缓存。

'cache' => ['enable' => false, 'compress' => false, 'dir' => null, 'expire' => 86400, 'verifyPost' => false]

]);

}

}

}

}

这里 采集结果非空的时候

$result = $data->all();

if (!empty($result)) {

xx这里执行相关代码

}

4、我希望有懂得人能帮我看看咋回事。希望的结果就是假如出现了404 或者其他一些无响应的异常 线程不中断继续执行其他url;

 类似资料: