PHP脚本循环失效仅执行首行问题排查与修复求助
问题原因与修复方案
循环失效的核心原因
- 错误调用
fclose:handle_url函数中,$file是存储文件名的字符串('result.txt'),但代码错误地对其调用fclose($file)——fclose仅接受文件资源句柄,此操作会触发PHP致命错误,直接终止脚本执行,导致仅处理第一行后停止。 - 未处理换行符:
fgets读取行内容时会包含行尾的\n换行符,未清理就进行URL编码,会导致API请求的URL包含无效的%0A编码值,可能引发接口请求失败。
修复后的完整脚本
<?php function handle_url($url){ // 清理传入的URL,去掉首尾空白(包括换行符) $url = trim($url); // 空行直接跳过 if(empty($url)) return; $file = 'result.txt'; $long_url = urlencode($url); $api_token = '0123456789'; $api_url = "https://mywebsite.com/api?api={$api_token}&url={$long_url}"; $result = file_get_contents($api_url); if( $result ){ echo $result . PHP_EOL; } // 合并写入操作,减少IO次数 $content = $long_url . PHP_EOL . $result . PHP_EOL; file_put_contents($file, $content, FILE_APPEND); sleep(1); } $file = fopen('mylink.txt', 'r'); if ($file){ while (!feof($file)) { $line = fgets($file); handle_url($line); } fclose($file); } ?>
关键修复点说明
- 移除错误的
fclose调用:file_put_contents是一次性写入函数,无需手动关闭文件,直接删除fclose($file)即可避免致命错误。 - 添加URL清理逻辑:用
trim()去除URL首尾的空白字符(包括换行符),并判断空行直接跳过,避免无效的API请求。 - 合并写入操作:将两次
file_put_contents合并为一次,减少磁盘IO操作,提升效率。
内容的提问来源于stack exchange,提问作者georgman
相关产品推荐
相关产品推荐

