假设我有一个PHP脚本要提供一个大文件,而我目前是通过FTP上传这个大文件。请问在我的PHP脚本中是否有一种方法可以检查上传是否完成?例如,是否有一种方法可以检查文件是否正在被写入等等?
更新:之前应该提到,我不是指通过上传脚本上传,我是指通过其他方式(如FTP或SFTP)上传大型PDF文件等。
更新:之前应该提到,我不是指通过上传脚本上传,我是指通过其他方式(如FTP或SFTP)上传大型PDF文件等。
您可以在上传脚本中使用一个临时文件(在临时目录中),如果上传完成,您可以将文件简单地移动到最终位置并设置好文件名。
这是解决此问题的常见方案。
要获取临时文件(与环境无关),请使用 PHP 函数:
resource tmpfile ( void )
您可以在http://pl.php.net/manual/en/function.tmpfile.php找到相关的it技术文档。
使用此函数时,您需要在关闭句柄之前复制文件,因为当您调用fclose(handle)
时,该文件将被删除。为确保文件缓冲区已清除,您可以在最后调用fflush(handle)
。
或者,如果您不想使用tmpfile(void)
函数,则可以手动完成此操作。
string tempnam ( string $dir, string $prefix )
前缀是为了方便将文件分组、删除或其他操作而添加的前缀。调用此函数可在指定目录中获取唯一的文件,作为目录,您可以通过调用以下方式获取临时目录:
string sys_get_temp_dir ( void )
当你有了自己的临时文件后,写入上传数据并关闭它。 使用以下命令将此文件复制到最终位置:
bool copy ( string $source, string $dest [, resource $context ] )
要在您的环境中清除临时文件,请调用以下命令:
删除您的临时文件
bool unlink ( string $filename [, resource $context ] )
flock
(http://de2.php.net/manual/en/function.flock.php)进行锁定应该会返回`FALSE`,这时你就知道文件正在被其他程序使用。 - Gordon