проблема с php-файлом существует — 1000 файлов

#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, поэтому остальной ваш код бесполезен для моего сценария (я думаю)