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