Jam*_*D-0 0 php c perl readdir scandir
目标目录有1000万个+文本文件.using $a = scandir()在网页上是致命的慢.需要数组结果不到两秒钟.过滤不起作用(也扫描整个列表)
所有我能想到的是使用一个perl或c程序来预处理并将目标目录中的x千个文件名填充到一个文件中,标记目标目录中的文件名,最后用一个.pi(或其他东西)选中并使用php的file()函数来获取而是从文件中的列表.
我需要打开并处理每个文件,然后才能填入表中.仅供参考.我不能等待超过1-2秒的时间让阵列可用.任何协助赞赏.记忆不是问题.hdd空间不是问题,处理器能力不是问题.问题是在使用网页前端时快速获取阵列中的列表.我等不及了,因为我厌倦了等待.
我试图用一个简短快速的C程序与opendir和readdir,但即使它需要近4分钟时间扫描目录列表.至少我可以在它上面放一个调控器来限制x文件.
看来答案是调用perl或者c,我可以限制X文件,我可以把这个程序system()或backticks.那个列表可以打开file()...... OTF ......有道理吗?
问题是PHP和文件系统更多.大多数文件系统在单个目录中不能很好地处理1000万个文件,性能开始受到严重影响.在C或Perl中重写它不太可能获得更好的性能,因为文件系统简直不堪重负并且其性能已经变得病态.
首先,切换scandir到opendir和readdir.这避免了必须制作1000万个元素阵列.它还允许您的程序在费力地读取1000万个文件名之前立即开始工作.
if ($dh = opendir($dir)) {
    while (($file = readdir($dh)) !== false) {
        ...do your work...
    }
    closedir($dh);
}
其次,根据文件名的第一个字母重构目录,使其至少具有两级子目录.例如,t/h/this.is.an.example.这会将单个目录中的文件数减少到文件系统可以更好地处理的级别.