使用 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:: 如何将所有已下载的文件重命名为 wget --content-disposition 给出的名称?

Swift iOS 检查文件是不是已从 json 下载

sh bash wget - 在下载之前检查url文件是否存在

将 wget 连接到 ***

如何检查 Xcode 是不是下载了所有配置文件?