PHP — проверьте, не заблокирован ли файл CSV для изменения другим пользователем

Я использую WinSCP для непрерывного извлечения файлов CSV с удаленного FTP.

Я создал PHP-скрипт, который сканирует папку каждые 10 минут, чтобы импортировать эти CSV-файлы в базу данных с помощью LOAD DATA INFILE

Проблема в том, что мой PHP-скрипт выполняет LOAD DATA INFILE, даже если файл все еще загружается WinSCP (некоторые файлы имеют размер от 1 до 2 ГБ, поэтому иногда это занимает много времени)

Поэтому я хотел бы добавить условие перед LOAD DATA INFILE, чтобы проверить, заблокирован ли файл CSV для изменения другим пользователем (это то, что сообщает мне Excel, когда я пытаюсь открыть его вручную)

Я пробовал несколько вещей:

is_file($file_path) 
boolean true
is_writable($file_path)
boolean true
is_readable($file_path)
boolean true
file_exists($file_path)
boolean true

Когда я использую fopen, он возвращает мне false

fopen($file_path, "r+")
boolean false

Но у меня есть исключение, и я не знаю, не снизит ли производительность скрипта открытие 2-гигабайтных файлов перед каждым LOAD DATA INFILE

Warning: fopen(***\booking.csv): failed to open stream: Resource temporarily unavailable in ***\load.php on line 62

person Rocstar    schedule 02.09.2020    source источник
comment
fopen не считывает файл в память, это не должно значительно снизить производительность вашего скрипта.   -  person Rob Ruchte    schedule 02.09.2020


Ответы (1)


Я бы посоветовал вам загрузить файлы в другую папку, перемещая их в отслеживаемую папку только после завершения загрузки.

Или почему бы вам не запустить свой PHP-скрипт явно после завершения загрузки?


Аналогичный вопрос см. также в разделе Как определить, что файл загружается по FTP.

person Martin Prikryl    schedule 02.09.2020