使用wget检查文件是否已完全下载

时间:2017-04-12 18:40:05

标签: php wget getid3

我使用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 个答案:

答案 0 :(得分:0)

首先我会尝试使用https。如果您正在连接的服务器碰巧支持它,那么您可以解决整个问题,因为丢失的字节通常是由网络上的路由器上的硬盘或不良MTU设置引起的。 http连接正常降级,为您提供尽可能多的文件管理,而https连接只是在丢失字节时失败,因为您无法解密非完整的数据包。 懒惰的IT人员往往会因为修复https的完全失败而受到刺激,但他们在诊断和修复角落情况方面的压力较小,例如缺少只通过http发生较大事务的字节。

如果https不可用,请继续阅读。

HTTP服务器响应可以包括Content-Length标头,指示特定事务中的字节数。 如果标题存在,您应该可以通过直接运行wget来添加-v标志来查看它。 如果不存在,我相信wget会报告Length: unspecified后跟content-type标题的值。 如果它告诉你(并假设字节数是准确的)那么你可以只比较你得到的文件的字节数和事务中的字节数。

如果您正在联系的服务器没有提供此标题,那么您将使用不太精确的方法,例如找到一些基本上播放mp3的播放器,直到它结束,然后查看它花了多长时间然后将其与ID3标签中列出的长度进行比较(该文件位于文件的最开头)。你不可能得到完全匹配,因为标签中的时间(如果它在那里)仅精确到秒,这意味着半秒可能会从文件的末尾消失,你不会'知道。