2012-03-19 1 views
2

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

Этот код является безопасным и подходит для этой проверки?

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

....do stuff.... 

} 
+3

Как насчет блокировки сначала: http://php.net/manual/en/function.flock.php? –

ответ

0

Я бы относиться к выгрузке FT качестве два ступеней

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

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

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

+0

Функция 'filemtime' и кэшируется, поэтому вызов' clearstatcache' необходим в этом случае каждый раз, когда мы хотим определить дату последнего изменения файла. – Timur

1

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

 Смежные вопросы

  • Нет связанных вопросов^_^