Лучший способ избежать такого рода проблем - загрузить временный файл, а затем переименовать его.Таким образом, нет возможности появления частичного файла.
Что касается того, почему это происходит каждый раз, подумайте об этом.400 000 просмотров страниц в день == 4,6 запросов в секунду в среднем.Учитывая, что большинство сайтов, которые я когда-либо видел, имеют гораздо больше трафика в определенные часы (в течение дня), я подозреваю, что вы видите свыше 10-20 запросов в секунду.с такой скоростью, если запись файла (из-за загрузки) занимает больше 0,05 секунды, вероятность чтения во время записи резко возрастает.
Таким образом, ваш выбор (в порядке от наиболее надежного до минимального)Вы всегда можете сделать несколько):
- Загружать в нерабочее время, когда (надеюсь) трафик ниже ...
- Использовать FTP-сервер, который выполняет бит переименования.
- Вручную переименуйте файл при загрузке нового.(Важно; переименуйте, чтобы перезаписать оригинал. Не удаляйте и не перемещайте оригинал первым) ...
- Взломайте Smarty, чтобы игнорировать новые файлы с отметкой времени менее 10-30 секунд (Просто позвоните
filemtime()
, чтобы определить, когда он был последний раз изменен. Обязательно сначала наберите clearstatcache()
, чтобы не было старое время) ...