#php #validation #file
#php #проверка #файл
Вопрос:
У меня есть папка, которая содержит более 1000 вложенных папок. В каждой вложенной папке находится 1-800 изображений, плюс папка thumbs с таким же количеством уменьшенных версий. В общей сложности около 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()
продолжал работать, пока все файлы не будут проверены?
Комментарии:
1. У вас есть доступ к журналам ошибок сервера? Посмотрите, какова точная причина ошибки 500.
2. да — я просматриваю свои журналы ошибок и не вижу там ничего серьезного, кроме того факта, что отсутствуют 20-25 файлов jpg. Я могу только предположить, что внутренняя ошибка сервера 500 ссылается на тайм-аут скрипта после наблюдения за поведением скрипта
Ответ №1:
Как вы запускаете скрипт? Если это происходит из-за нажатия на веб-страницу, возможно, ваш сервер ограничивает время выполнения скрипта примерно на 30 секунд и по истечении этого времени отключает PHP, что приводит к внутренней ошибке сервера. То же самое может быть верно, если он запускается через cron, но это менее вероятно.
Комментарии:
1. На самом деле я использую его, заходя на веб-страницу. Есть предложения в противном случае? я не могу настроить cron
2. @andrew: Сделайте свой скрипт быстрее, обратитесь к своему хостинг-провайдеру по поводу увеличения времени ожидания или переключитесь на хост, который поддерживает cronjobs.
3. Вы должны попробовать set_time_limit (600); Это позволит скрипту работать в течение 10 минут (если ваш хост позволяет вам изменять эту часть среды выполнения)
4. Мэтт, я пытался установить значение 600, 300 и даже 0 для неограниченного количества, но я все еще получаю эту ошибку через некоторое время и до того, как скрипт перестанет выполняться. Теперь я ищу что-нибудь для имитации crontab, поскольку у меня нет прямого доступа
Ответ №2:
Вы уверены, что это не тайм-аут скрипта? Проверьте 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>";
}
?>
Комментарии:
1. я пробовал set_time_limit (600) и даже 300 и 0, но все равно ничего не вышло. Кроме того, я использую только файлы jpg, поэтому остальной ваш код бесполезен для моего сценария (я думаю)