Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:如何检查当前是否正在写入文件_Php_File_File Io - Fatal编程技术网

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

PHP:如何检查当前是否正在写入文件,php,file,file-io,Php,File,File Io,假设我有一个PHP脚本,它将提供一个大文件,我目前正在通过FTP上传这个大文件 如果上传完成,有没有办法签入我的PHP脚本?例如,是否有一种方法可以检查文件当前是否正在写入或类似的内容 更新:之前应该提到过这一点,但我不是说通过上传脚本上传,我指的是通过FTP或SFTP等其他方式上传大pdf文件。您可以在上传脚本中使用临时文件(在临时目录中)若上传完成,你们可以简单地将文件移动到你们的最终位置,并有一个好的文件名 这是这个问题的常见解决方案 要获取临时文件(与环境无关),请使用PHP函数: re

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

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


更新:之前应该提到过这一点,但我不是说通过上传脚本上传,我指的是通过FTP或SFTP等其他方式上传大pdf文件。

您可以在上传脚本中使用临时文件(在临时目录中)若上传完成,你们可以简单地将文件移动到你们的最终位置,并有一个好的文件名

这是这个问题的常见解决方案

要获取临时文件(与环境无关),请使用PHP函数:

resource tmpfile ( void )
有关它的文档,请访问 此函数用于将句柄返回到新的干净临时文件

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


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

string tempnam ( string $dir, string $prefix )
Prefix是你的文件的前缀,可以方便地将她分组删除。调用此函数以获取类型化目录中的唯一文件,当目录获取环境中的临时目录时,您可以通过调用:

string sys_get_temp_dir ( void )
然后,当您拥有self tempfile时,将其写入上载数据并关闭。 使用以下命令将此文件复制到最终位置:

bool copy ( string $source, string $dest [, resource $context ] )
并删除临时文件,以便在环境中保持干净调用:

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

您不会说您在哪个操作系统上运行,但如果您在类Unix系统上,您可以使用查看当前谁在使用文件。有一个用于等效Windows端的脚本。

如果文件在上载过程中被锁定,尝试从PHP中删除它时应返回
FALSE
,然后您就知道该文件被其他atm使用。@Gordon:如果脚本并行运行两次,这意味着即使一个成功,另一个也会失败?或者?如果上载当前正在运行并且FTP锁定了文件,则两个脚本都将返回false。如果没有上传,并且一个脚本聚集文件,那么是,另一个脚本将返回false。