首页 > 解决方案 > PHP - 检查 CSV 文件是否被锁定以供其他用户修改

问题描述

我使用 WinSCP 从远程 FTP 连续检索 CSV 文件

我创建了一个 PHP 脚本,它每 10 分钟扫描一次文件夹,以便使用LOAD DATA INFILE

问题是LOAD DATA INFILE即使文件仍在由 WinSCP 下载,我的 PHP 脚本也会执行(有些文件是 1 到 2gb,所以有时需要很长时间)

所以我想在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

但是我有一个例外,我不知道在每个之前打开 2gb 文件是否LOAD DATA INFILE会降低脚本的性能

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

标签: phpfilefile-locking

解决方案


我建议您将文件下载到另一个文件夹,仅在下载完成后将它们移动到受监控的文件夹。

或者,一旦下载完成,您为什么不显式地触发您的 PHP 脚本?


对于类似的问题,另请参阅如何检测文件正在通过 FTP 上传


推荐阅读