我正在使用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
有什么功能可以检查吗?
谢谢
首先,我会尝试https。如果您要连接的服务器恰好支持它,则可以解决整个问题,因为丢失的字节通常是由其网络上路由器上的不稳定硬件或不良MTU设置引起的。http 连接会优雅地降级,以为您提供尽可能多的文件,而 https 连接在丢失字节时会失败,因为您无法解密不完整的数据包。 懒惰的IT人员往往会被敦促修复https的完全故障,但他们诊断和修复极端情况的压力较小,例如仅通过http发生较大事务的丢失字节。
如果 https 不可用,请继续阅读。
HTTP 服务器响应可能包含指示特定事务中的字节数的Content-Length
标头。 如果标头在那里,您应该能够通过直接运行 wget 并添加-v
标志来查看它。 如果不存在,我相信 wget 会报告Length: unspecified
后跟content-type
标头的值。 如果它告诉您(并假设字节计数是准确的),那么您可以比较您获得的文件和事务中的文件的字节数。
如果您联系的服务器没有提供此标头,那么您将留下不太精确的方法,例如找到一些基本上可以播放 mp3 直到它结束的播放器,然后查看它花了多长时间,然后将其与 ID3 标签中列出的长度进行比较(在文件的最开头)。但是,您将无法获得完全匹配,因为标签中的时间(如果有的话)仅精确到秒,这意味着文件末尾可能会消失半秒,而您不会知道。