我有一个包含1000多个子文件夹的文件夹。在每个子文件夹中有1-800个图像,以及具有相同数量的较小版本的thumb文件夹。总共有大约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()
继续有效,直到检查完所有文件为止?
答案 0 :(得分:3)
你是如何运行脚本的?如果是通过访问网页,可能是您的服务器在30秒左右的时间内限制了脚本的运行时,并在此之后杀死了PHP,从而导致内部服务器错误。如果它是通过cron运行的话也是如此,但这种可能性不大。
答案 1 :(得分:3)
您确定这不是脚本超时吗?查看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>";
}
?>