Я использую 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 просто терпят неудачу, когда теряют байты, потому что вы не можете расшифровать неинтактные пакеты.
Ленивые ИТ-специалисты, как правило, склонны к исправлению полных сбоев https, но им меньше нужно диагностировать и исправлять критические случаи, такие как пропущенные байты, которые только вызывают большие транзакции через http.
Если https недоступен, продолжайте читать.
Ответ HTTP-сервера может включать Content-Length
заголовок, указывающий количество байтов в конкретной транзакции.
Если заголовок есть, вы сможете увидеть его, запустив wget напрямую, добавив -v
флаг.
Если его там нет, я верю, что wget сообщит Length: unspecified
с последующим content-type
значение заголовка.
Если он говорит вам (и предполагая, что количество байтов является точным), то вы можете просто сравнить количество байтов файла, который вы получили, и числа в транзакции.
Если сервер (ы), с которыми вы связываетесь, не предоставляют этот заголовок, у вас остаются менее точные методы, такие как поиск проигрывателя, который будет воспроизводить mp3 в основном до конца, а затем посмотреть, сколько времени это заняло, и затем сравнить на длину, указанную в теге ID3 (которая находится в самом начале файла). Вы не сможете получить точное совпадение, потому что время в теге (если оно есть) точно с точностью до секунды, что означает, что с конца файла может пройти полсекунды, и вы не сможете я знаю
Других решений пока нет …