0

我正在使用 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

有什么功能可以检查吗?

谢谢

4

1 回答 1

0

首先,我会尝试使用 https。如果您要连接的服务器碰巧支持它,那么您可以解决整个问题,因为丢失的字节通常是由脆弱的硬件或网络上路由器上的错误 MTU 设置引起的。http 连接优雅地降级为尽可能多地为您提供文件,而 https 连接在丢失字节时只会失败,因为您无法解密非完整数据包。懒惰的 IT 人员倾向于修复 https 的完全故障,但他们在诊断和修复诸如丢失字节等仅在 http 上发生较大事务的特殊情况时压力较小。

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

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

如果您正在联系的服务器不提供此标头,则剩下的方法不太精确,例如找到一些基本上可以播放 mp3 直到结束的播放器,然后查看它花了多长时间,然后进行比较到 ID3 标记中列出的长度(位于文件的最开头)。但是,您将无法获得完全匹配,因为标签中的时间(如果存在)仅精确到秒,这意味着从文件末尾可能会消失半秒,而您不会不知道。

于 2017-04-12T18:54:10.307 回答