4

我有清理脚本,它将 XLS 文件从一个地方移动到另一个地方。对于这个文件移动过程,我使用了重命名功能。这个脚本工作正常。但是当 XLS 文件打开时,当我尝试移动该 xls 时,我收到错误,只是说不能重命名 sample.xls。但我想添加功能,例如在启动重命名功能之前检查 XLS 是否打开。

我相信这是函数调用flock,但这仅适用于 TXT 文件。

如何在调用重命名函数之前检查 XLS 文件是否打开。

4

3 回答 3

4

您可以尝试的一件简单的事情是使用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因此很难找到。

于 2013-07-11T08:59:34.393 回答
2

你应该使用flock(). 这会在文件上放置一个标志,以便通知其他脚本该文件正在使用中。fclose该标志在脚本结束时有意使用或隐式关闭。

于 2013-07-11T08:46:26.933 回答
1

使用文件锁,如:

flock($file,LOCK_EX);

看到这个

于 2013-07-11T09:03:01.603 回答