我有清理脚本,它将XLS文件从一个地方移动到另一个地方。对于这个文件移动过程,我使用了重命名功能。这个脚本运行正常。但是当XLS文件打开时,当我尝试移动那个xls时,我收到的错误只是说不能重命名sample.xls。但是我想在启动重命名功能之前添加像检查XLS打开的功能。
我相信这是函数调用flock
,但这仅适用于TXT文件。
如何在调用重命名函数之前打开XLS文件。
答案 0 :(得分: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
,因此它将是很难找到。
答案 1 :(得分:2)
您应该使用flock()
。这会在文件上放置一个标志,以便通知其他脚本该文件正在使用中。该标志有意使用fclose
或隐式地在脚本结束时关闭。
答案 2 :(得分:1)