需求是将一个192M的文件,将url地址提取出来,然后要访问一遍
1首先将文件按行进行拆分
split -l 2000 data_20210728_071202.txt
2将切分好的文件命名,也可以用shell脚本写一个命名
#!/bin/bash
function read_dir(){
i=1
for file in `ls $1` #注意此处这是两个反引号,表示运行系统命令
do
if [ -d $1"/"$file ] #注意此处之间一定要加上空格,否则会报错
then
read_dir $1"/"$file
else
echo $1"/"$file #在此处处理文件即可
str=".txt"
mv $1"/"$file $1"/"$i$str
((i++))
fi
done
}
#读取第一个参数
read_dir $1
3.php 写了一个循环读取文件请求地址的脚本,执行就行了(小技巧 可以用yield)
set_time_limit(0);
$str = '';
for ($p=18;$p<125;$p++) {
$logFiles = './test/'.$p.'.txt';
if (! file_exists($logFiles)) {
throw new \Exception('日志文件不存在');
}
$file = fopen($logFiles, 'r');
$doneData = [];
$date = date('YmdHis');
$i = 0;
while (! feof($file)) {
$lineData = fgets($file);
if ($lineData) {
$lineData = json_decode($lineData, true);
$rawLog = $lineData['__raw_log__'];
$start = strpos($rawLog, '{');
$end = strpos($rawLog, '}');
$requestData = substr($rawLog, $start, $end - $start + 1);
$requestData = $requestData . "}";
$lineData = json_decode($requestData, true);
if ($lineData['data']['notifyUrl']) {
$html = curlUrl($lineData['data']['notifyUrl']);
$doneLogName = $html ? $p . '_success.txt' : $p . '_fail.txt';
file_put_contents($doneLogName, $lineData['data']['notifyUrl'] . "\r\n", FILE_APPEND);
sleep(0.1);
}
}
}
$str.=$p."finish";
echo $str;
fclose($file);
}
function curlUrl($url)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
//设置头文件的信息作为数据流输出
curl_setopt($curl, CURLOPT_HEADER, 1);
//设置获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
$http_status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($http_status == 200) {
return true;
}
return false;
}