Задать вопрос
Anonym
@Anonym
Программирую немного )

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

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

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

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

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽