PHP:如何检查当前是否正在写入文件

时间:2010-06-26 10:33:36

标签: php file file-io

假设我有一个PHP脚本,它将提供一个大文件,我目前正在通过例如FTP上传这个大文件。

如果上传完成,有没有办法可以检查我的PHP脚本?例如,有一种方法可以检查当前是否正在写入文件或类似的文件吗?

更新:之前应该提到这一点,但我不是在谈论通过上传脚本上传我正在谈论的例如通过FTP或SFTP等其他方式上传大型pdf文件

2 个答案:

答案 0 :(得分:2)

您可以在上传脚本中使用一个临时文件(在temportantly目录中),如果上传完成,您可以简单地将文件移动到具有良好文件名的最终位置。

这是此问题的常见解决方案。

对于获取temportantly文件(环境独立)使用PHP函数:

resource tmpfile ( void )

您可以在http://pl.php.net/manual/en/function.tmpfile.php找到它的文件记录 此函数将句柄返回到新的干净临时文件。

但是如果您使用此功能,则必须在关闭文件之前复制文件,因为在调用fclose(handle)时此文件已被删除。为了确保文件缓冲区是干净的,您可以在结束时调用fflush(handle)


或者,如果您不想使用tmpfile(void)功能,可以手动执行此操作。

string tempnam ( string $dir, string $prefix )

前缀是文件的前缀,可以轻松地将其分组以删除或删除某些内容。调用此函数在类型目录中获取唯一文件,因为目录在您的环境中获取临时目录,您可以通过调用来获取此信息:

string sys_get_temp_dir ( void )

然后当你有自己的tempfile时,写入它上传数据并关闭。 使用以下方法将此文件复制到最终位置:

bool copy ( string $source, string $dest [, resource $context ] )

并删除你的临时文件,以便在你的环境中保持干净:

bool unlink ( string $filename [, resource $context ] )

答案 1 :(得分:0)

您没有说明您正在运行哪个操作系统,但如果您使用的是类Unix系统,则可以使用fuser查看当前正在使用文件的用户。 handle可以使用等效的Windows端。