Anonym
@Anonym
Программирую немного )

PHP: Проверить, открыт ли файл на запись

Есть php скрипт, который читает содержимое директории и обрабатывает файлы.
Как узнать, полностью ли файл залит в директорию или находится в стадии загрузки?

Пример: я копирую фильм в директорию (долго копируется), php скрипт получает содержимое директории, видит новый файл и пытается что-то с ним сделать, но сам файл еще копируется.

fopen отлично открывает такие файлы даже на запись, is_writable, is_readable и подобные, также говорят, что с файлом всё хорошо, rename отлично перемещает такой файл (получается битый).
  • Вопрос задан
  • 4190 просмотров
Пригласить эксперта
Ответы на вопрос 6
shsweb
@shsweb
Можно проверять размеры файлов. Если за минуту(несколько минут, час и т.д.) размер файла не изменился, предположить что он залит полностью.
Ответ написан
Комментировать
Хм… а попробовать открыть такой файл с эксклюзивной блокировкой? Или… возможно есть у фтп какая настройка, что бы он сам лочил такой файл на время записи.
Ответ написан
lacki
@lacki
вариантов кроме как делать lsof директории от root не вижу. запуск только lsof от root без ввода пароля можно реализовать через sudoers.
Ответ написан
Комментировать
AloneCoder
@AloneCoder
[object Object]
Используйте контрольные суммы или копируйте с временным расширением
Ответ написан
ertaquo
@ertaquo
Скопируйте под одним именем (например, добавив в начало имени файла точку или нижнее подчеркивание), в скрипте напишите, что такие файлы надо пропускать. После окончания копирования переименуйте файл.
Ответ написан
@resurection
Подозреваю, что FTP-сервер пишет в локальный файл порциями, буферизируя пришедшие данные и периодически скидывая их на диск. Если моё предположение верно, то в промежутках между сбросами, файл не заблокирован. Если так, то, в настройках ФТП-сервера может быть соответствующая галка, что бы блокировать файл на протяжении всего процесса закачивания.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
25 апр. 2024, в 14:21
15000 руб./за проект
25 апр. 2024, в 14:07
20000 руб./за проект
25 апр. 2024, в 14:06
2500 руб./за проект