首页 > 解决方案 > 在核心 php 中读取 1000 多个 txt 文件

问题描述

我有 1000 多个以文件名作为用户名的 txt 文件。现在我正在使用循环阅读它。这是我的代码

for($i=0; $i<1240; $i++){                       
    $node=$users_array[$i];                     
    $read_file="Uploads/".$node."/".$node.".txt";                                
    if (file_exists($read_file)) {

        if(filesize($read_file) > 0){       
            $myfile = fopen($read_file, "r");                           
            $file_str =fread($myfile,filesize($read_file));                         
            fclose($myfile);  
        }
    }
}

当循环运行时,它需要太多时间并且服务器超时。

我不知道为什么要花这么多时间,因为文件中没有太多数据。从 txt 文件中读取所有文本应该很快。我对吗?

标签: phpfopen

解决方案


好吧,您正在 HDD/SSD 上进行读取操作,这些操作不如内存快,因此您应该期望运行时间较长,具体取决于文本文件的大小。您可以尝试以下方法:

  • 如果您从浏览器运行脚本,我建议从命令行运行它,这样您就不会出现 Web 服务器超时,并且如果 php 上没有设置时间执行限制,脚本将设法完成,在这种情况下可能你应该增加它
  • 在上面的脚本中,您可以将“filesize($read_file)”设置为一个变量,这样您就不会执行两次,它可能会改进脚本的运行
  • 如果您仍然无法完成工作,请考虑分批运行 100 或 500 个
  • 密切关注内存使用情况,也许这就是脚本死亡的原因
  • 如果您需要文件的内容作为字符串,您可以尝试“file_get_contents”并可能跳过“filesize”检查所有

推荐阅读