Apache: возвращает испорченный файл, если запрашивается во время копирования файла - PullRequest
1 голос
/ 08 сентября 2011

На своем веб-сервере я генерирую анимированный GIF каждые 15 минут.Результат записывается во временный каталог, затем я копирую gif (несколько МБ) в каталог htdocs с помощью php: copy ().Однако, если во время процесса копирования возникает запрос http на файл, Apache вернет только часть файла, что приведет к повреждению анимации.

Как я могу решить эту проблему?Используя rename () вместо copy ()?Или есть способ дать Apache команду дождаться выполнения операций файловой системы перед доставкой файла (не должно ли это быть по умолчанию?)

Ответы [ 2 ]

0 голосов
/ 08 сентября 2011

Вам необходимо скопировать во временное имя файла, а затем переименовать временное.Тогда сервер никогда не увидит неполный файл.

0 голосов
/ 08 сентября 2011

Определенно используйте переименование вместо копирования. Переименование (по сути, mv) просто изменяет указатели файлов, поэтому, даже если это не действительно атомарный (я не смог найти убедительный источник, но я подозреваю, что это так), это будет быстро, что шансы на загрузку страницы в этом интервале практически равны нулю.

Для получения дополнительной информации см .:

Надеюсь, это поможет!

...