使用 wget 检查文件是不是已完全下载
Posted
技术标签:
【中文标题】使用 wget 检查文件是不是已完全下载【英文标题】:check if file is fully downloaded using wget使用 wget 检查文件是否已完全下载 【发布时间】:2017-04-12 18:40:04 【问题描述】:我正在使用 php wget 从另一台服务器下载 mp4 文件
exec("wget -P files/ $http_url");
但是我没有找到任何选项来检查文件是否正确下载。
我尝试使用 getID3() 获取持续时间文件,但它总是返回良好的值,即使文件没有正确下载
// Check file duration
$file = $getID3->analyze($filepath);
echo $file['playtime_string']; // 15:00 always good value
有什么功能可以检查吗?
谢谢
【问题讨论】:
【参考方案1】:首先我会尝试使用 https。如果您要连接的服务器碰巧支持它,那么您可以解决整个问题,因为丢失字节通常是由硬件不稳定或网络上路由器上的错误 MTU 设置引起的。 http 连接优雅地降级为尽可能多地为您提供文件,而 https 连接在丢失字节时只会失败,因为您无法解密非完整数据包。 懒惰的 IT 人员倾向于修复 https 的完全故障,但他们在诊断和修复诸如丢失字节等仅在 http 上发生较大事务的极端情况时压力较小。
如果 https 不可用,请继续阅读。
HTTP 服务器响应可能包含一个Content-Length
标头,指示特定事务中的字节数。
如果标题在那里,您应该能够通过直接运行 wget 看到它,添加-v
标志。
如果它不存在,我相信 wget 会报告 Length: unspecified
后跟 content-type
标头的值。
如果它告诉您(并假设字节数是准确的),那么您只需比较您获得的文件的字节数和事务中的字节数。
如果您联系的服务器不提供此标头,则您只能使用不太精确的方法,例如找到一些基本上可以播放 mp3 直到结束的播放器,然后查看它花了多长时间,然后然后将其与 ID3 标记中列出的长度(位于文件的最开头)进行比较。但是,您将无法获得精确匹配,因为标签中的时间(如果存在)仅精确到秒,这意味着从文件末尾可能会消失半秒,而您不会不知道。
【讨论】:
您好,我正在使用 wget http exec("wget -P files/ $http_url"); 感谢@LinuxDisciple的详细回答,如果我先使用wget,5分钟后,我想检查使用php函数怎么办?有没有可能?以上是关于使用 wget 检查文件是不是已完全下载的主要内容,如果未能解决你的问题,请参考以下文章
wget:: 如何将所有已下载的文件重命名为 wget --content-disposition 给出的名称?