<?php /** * 生产修复数据的时候,写啦一个脚本找运维执行,时间太长运维叨叨说脚本也没有个进度条,什么时候能执行完成都不知道 * 最后修复完成回来写的玩的 */ $totalLen = 50; //默认进度条的长度 $dataCount = 1; //默认的执行次数,(需要处理的数据条数) $baseNum = 100; //百分比进制 for ($i = 1; $i <= $dataCount; $i++) { $ratio = bcmul(bcdiv($i, $dataCount, 2), $baseNum); //计算当前执行位置在总循环次数的占比 $speedLen = ceil(bcmul($totalLen, bcdiv($ratio, $baseNum, 2))); //然后乘以总长度得出当前进度条显示长度 $spaceLen = $totalLen - $speedLen; // 获取剩余未完成长度 sleep(1); //这是相当于处理的程序 echo '[' . str_repeat('#', $speedLen) . str_repeat(' ', $spaceLen) . ']' . $ratio . '%' . "\r"; if ($ratio == $baseNum) { writeLog(['count' => $dataCount, 'msg' => '历史数据修复问题完成']); } } //记录日志的方法 function writeLog($data) { if (is_array($data)) { $data = json_encode($data,JSON_UNESCAPED_UNICODE); //1 file_put_contents()只能保存一维数组和字符串,所以要转json格式 2 JSON_UNESCAPED_UNICODE 中文不转义 } $msg = date("Y-m-d H:i:s", time()) . ' | ' . microtime() . '|' . $data . PHP_EOL; // PHP_EOL php兼容linux,os,win 的换行的问题方法 $fileName = 'logs' . '/local-' . date("Y-m-d", time()) . '.log'; //首先创建logs文件夹,不然保存不上 file_put_contents($fileName, $msg,FILE_APPEND | LOCK_EX); //FILE_APPEND添加数据为追加形式,LOCK_EX设置独占锁 }