我在客户端上传的远程机器上有一个目录(通过不同的工具和协议,从WebDav到FTP)文件。我也有一个PHP脚本返回目录结构。现在,问题是,如果客户端上传大文件,并且在上传时间内发出请求,那么PHP脚本即使没有完全上传,也会返回该文件。有没有办法检查一个文件是否使用PHP完全上传?有没有办法检查文件是否使用PHP完全上传?
回答
设置您的远程服务器将上传的文件移动到另一个目录,并且只查询目录文件被移动到文件。
据我所知,是没有办法(至少横机)说,如果一个文件仍然被上载,没有做这样的事情:
- 查询该文件的长度
- 等待几秒钟
- 查询该文件的长度
- 如果是一样的,它可能完成
+1表示逻辑,但即使这是有道理的,检查文件大小的最佳时间段是什么。如果上传器的连接问题可能会在文件上传过程中导致严重延迟,这意味着该文件可能具有相同的大小5,6,10秒或更长时间。如果文件较大,上传速度较慢,则不能很好地解决问题,因为您无法等待几个小时来查看是否完成。 **没有办法**可能是最好的答案。 – Wh1T3h4Ck5 2012-03-29 16:10:57
的确,这就是为什么我提供了一个可行的解决方案,而不是检查文件大小。至少OP可以根据他想做的事情做出决定。 – 2012-03-29 16:12:13
我不会依赖文件大小检查,因为元数据可能被缓存在操作系统中,而临时网络失速会欺骗你的检查。网络连接可能会停顿很多秒,在某些情况下甚至会持续几分钟。 – 2012-03-29 23:41:39
我认为,某些操作系统在下载文件时会包含一个“.part”文件,因此可能会检查是否存在这样的文件。否则,我同意Brian的回答。如果您在同一个系统上使用该脚本,那么使用move_uploaded_file()的返回值(如果该脚本正在被PHP脚本上传)足够简单,但它确实成为从远程目录拉取的一个挑战,该目录可以添加到不同的协议。
大多数UNIX/Linux/BSD-like操作系统有一个叫做lsof
(lsof代表“列表打开文件”)的命令,它输出系统中所有当前打开文件的列表。您可以运行该命令来查看是否有任何进程仍在使用该文件。如果没有,您的上传已完成。在这个例子中,AWK是用来过滤所以只有文件将显示,与写打开或读/写文件句柄:
if (shell_exec("lsof | awk '\$4 ~ /.*[uw]/' | grep " . $uploaded_file_name) == '') {
/* No file handles open for this file, so upload is finished. */
}
我不是很熟悉Windows服务器,但这个线程可以帮助你在Windows机器上做同样的事情(如果这是你所拥有的):How can I determine whether a specific file is open in Windows?
对不起,忘了提及,我在Linux上,并且永远是(不是可移植性的问题)。这听起来很棒!谢谢!明天会尝试。 – 2012-03-29 23:44:18
这个问题是,它计数任何访问文件,上传,下载等我想它可以被更新为仅用于上传,但它取决于如何访问该文件(webdav,ftp,ssh等) – 2012-04-03 11:46:46
嗯,是。但是,您可以使用awk仅显示使用写入或读取/写入文件处理程序打开的文件。这样,阅读不会打扰你。编辑答案... – 2012-04-08 21:06:10
- 1. 有没有办法检查文件是否在使用
- 2. 有没有办法检查(文件)句柄是否有效?
- 3. 有没有办法检查用户是否使用JQuery登录?
- 4. 有没有办法检查一个var是否使用setInterval()?
- 5. 有没有办法检查一个cookie在PHP中是否安全
- 6. 有没有办法检查我是否可以安全地使用Page.IsValid?
- 7. 文件没有完全上传
- 8. 有没有办法检查反应组件是否被卸载?
- 9. KML文件 - 有没有办法完全禁用描述气泡?
- 10. 亚马逊S3检查文件是否完全上传
- 11. Dart文件上传:较大的文件没有完全上传
- 12. 有没有办法检查使用JavaScript的文件编码?
- 13. 有没有办法检查用户目前是否空闲?
- 14. 有没有办法检查符号是否被引用?
- 15. 有没有办法检查TLS是否启用?
- 16. 有没有办法检查RVO是否被应用?
- 17. 有没有办法检查是否有其他程序全屏运行
- 18. PHP检查是否有文件选择上传
- 19. 检查是否至少有一个文件被上传PHP
- 20. 有没有办法找出.js文件是否使用jquery sintax?
- 21. 有没有办法来检查bean是否在spring上下文中定义?
- 22. 有没有办法使用PHP来检查我的邮件内容是否是垃圾邮件?
- 23. 有没有办法检查AWS上的日常数据传输?
- 24. 有没有办法检查Apache配置文件中是否存在目录?
- 25. 有没有办法以编程方式检查是否打开Excel文件
- 26. 有没有办法检查Hadoop文件是否已经打开写入?
- 27. 有没有办法检测一个网站是否使用SPDY?
- 28. 有没有办法检查RDP连接是否可能?
- 29. 有没有办法检查代码是否在TransactionScope中执行?
- 30. 有没有办法检查我的代理是否在线?
简而言之,答案是否定的。漫长的回答是不好的。 – satoshi 2012-03-29 15:56:29