我有清理脚本,它将 XLS 文件从一个地方移动到另一个地方。对于这个文件移动过程,我使用了重命名功能。这个脚本工作正常。但是当 XLS 文件打开时,当我尝试移动该 xls 时,我收到错误,只是说不能重命名 sample.xls。但我想添加功能,例如在启动重命名功能之前检查 XLS 是否打开。
我相信这是函数调用flock
,但这仅适用于 TXT 文件。
如何在调用重命名函数之前检查 XLS 文件是否打开。
我有清理脚本,它将 XLS 文件从一个地方移动到另一个地方。对于这个文件移动过程,我使用了重命名功能。这个脚本工作正常。但是当 XLS 文件打开时,当我尝试移动该 xls 时,我收到错误,只是说不能重命名 sample.xls。但我想添加功能,例如在启动重命名功能之前检查 XLS 是否打开。
我相信这是函数调用flock
,但这仅适用于 TXT 文件。
如何在调用重命名函数之前检查 XLS 文件是否打开。
您可以尝试的一件简单的事情是使用flock
在文件上获取独占锁,如果失败,您将知道文件正在被使用:
<?php
$fp = fopen('c:/your_file.xlsx', 'r+');
if(!flock($fp, LOCK_EX))
{
echo 'File is being used...';
exit(-1);
}
else
{
fclose($fp);
// rename(...);
}
另一种方法是检查 excel 通常在使用文件时创建的锁定文件是否存在:
<?php
$file = 'c:/testfile.xlsx';
$lock = 'c:/~$testfile.xlsx';
if (file_exists($lock))
{
echo "Excel $file is locked.";
}
else
{
echo "Excel $file is free.";
}
隐藏文件通常是带有前缀~$
的旧 excel 文件的名称,我相信 2003 年或更早的锁定文件以随机名称保存在临时文件夹中,~DF7B32A4D388B5854C.TMP
因此很难找到。
你应该使用flock()
. 这会在文件上放置一个标志,以便通知其他脚本该文件正在使用中。fclose
该标志在脚本结束时有意使用或隐式关闭。