Как проверить, что файл заполнен и не используется другим приложением в php - PullRequest
2 голосов
/ 19 марта 2012

На моем сервере есть файл, который обновляется каждые 5 минут. Файл загружается через FTP и обновляется после завершения загрузки. Я использую php-скрипт для получения данных этого файла и хотел бы, чтобы каждый раз, когда мой скрипт считывал этот файл, он был полным и действительным (он не загружался одновременно).

Является ли следующий код безопасным и пригодным для этой проверки?

if ( (($handle = fopen('/var/import/data.csv', 'r')) !== FALSE) && (filesize('/var/import/data.csv')>10) ) {

....do stuff....

}

Ответы [ 2 ]

1 голос
/ 19 марта 2012

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

0 голосов
/ 19 марта 2012

Я бы рассматривал загрузку по FTP как два этапа

  1. загрузка (как новый файл)
  2. переименование (чтобы перезаписать предыдущую версию)

Это массово уменьшает вероятность того, что ваш скрипт увидит неполный файл.

Либо проверьте время изменения файла (mtime) и получите доступ к файлу, только если он старшескажем, 30 секунд.Не забудьте сделать это время дольше, чем время загрузки.

...