flv 파일이나 mp4 파일을 다운로드할 때 php가 재생되지 않습니다
flv 재생 주소나 mp4 재생 주소를 POST를 통해 전송한 후 직접 다운로드하고 싶습니다. POST 데이터를 받아 POST합니다. 데이터 형식은 http://a.com/1.flv와 유사하며, 두 가지 방법으로 테스트되었습니다(다운로드를 위한 단순화된 코드만 게시됨).
<?php $url = implode($_POST); $file = file_get_contents($yes); header("Content-Disposition:attachment;filename=1.flv"); echo $file; ?>
<?php $url = implode($_POST); header("Content-type:video/mpeg4"); header("Content-Disposition:attachment;filename=1.flv"); readfile($url); exit; ?>
그런 다음 vim 편집기는 파일 시작 부분에 실제로 3바이트가 더 있다는 것을 발견했지만 왜 이 3바이트를 삭제하면 재생할 수 있습니다.
온라인에서 찾을 수 없었습니다. 대답은 이와 관련하여 아무것도 찾을 수 없다는 것입니다. . 문제가 뭔지 정말 모르겠어요. = =
이 세 캐릭터는 전설적인 BOM입니다
다운로드하는 PHP 파일이 BOM 형식의 UTF-8임을 설명하세요. Notepad++를 사용하여 살펴보세요.
아니면 모든 PHP 파일을 읽어서 제거하시겠습니까?
관련 기사:/** * 移除字符串的BOM * * @param string $str 输入字符串 * @return string 输出字符串 */ function removeBOM($str) { $str_2 = substr($str, 0, 2); $str_3 = substr($str, 0, 3);//$str_2.$str{2}; $str_4 = substr($str, 0, 4);//$str_3.$str{3}; if ($str_3 == pack('CCC',0xef,0xbb,0xbf)) //utf-8 return substr($str, 3); elseif ($str_2 == pack('CC',0xfe,0xff) || $str_2 == pack('CC',0xff,0xfe)) //unicode return substr($str, 2); elseif ($str_4 == pack('CCCC',0x00,0x00,0xfe,0xff) || $str_4 == pack('CCCC',0xff,0xfe,0x00,0x00)) //utf-32 return substr($str, 4); return $str; }