我有一个包含1000+子文件夹的文件夹。每个子文件夹中有 1-800 张图像,外加一个具有相同数量的较小版本的拇指文件夹。总共有大约18000张照片和18000个拇指
我创建了一个脚本来偶尔运行以检查所有内容是否存在(所有路径,文件夹和照片名称都存储在数据库中)。
使用 file_exist()
或 is_file()
,加上clearstatcache()
,我对我的数据库记录运行循环以检查是否一切正常。
为了检查脚本是否真的有效,我在表结构中包含一个检查字段:
photo_present, SET(Y,N)
每次我运行脚本时,验证的每张照片都将photo_present
标志设置为 Y
.
仅经过几条记录(300-800),脚本给出内部服务器错误 500。
我检查了我的表,我知道脚本已经运行了一段时间,因为我看到photo_present
字段设置为 Y
.
我的问题是如何优化它,以便file_exist()
或is_file()
将继续工作,直到检查完所有文件?
你是如何运行脚本的?如果是点击网页,则可能是您的服务器将脚本的运行时间限制在 30 秒左右,并在该时间之后杀死 PHP,从而导致内部服务器错误。如果它通过 cron 运行,情况也可能如此,但这不太可能。
您确定这不是脚本超时吗?检查 http://php.net/manual/en/function.set-time-limit.php
我自己认为 glob 是浏览文件夹和文件时的不错选择,您也许能够弄清楚一些东西。
<?php
//get all image files
$files = glob("{*.jpg,*.JPG,*.gif,*.GIF,*.png,*.PNG,*.cr2,*.CR2,*.DNG,*.dng}", GLOB_BRACE);
//print each file name
foreach($files as $file)
{
//Do your db validation here.
//echo "<a href="$file" style="display:block;">$file</a>";
}
?>