Home >Backend Development >PHP Tutorial >Flv file or mp4 file downloaded by php cannot be played
php cannot play when downloading flv files or mp4 files
I want to transfer the flv playback address or mp4 playback address through POST and then download it directly. Downloading is easy, and the POST data is received directly. The format of the data coming from POST is similar: http://a .com/1.flv, and then downloaded it through PHP. Two methods were tested (only the simplified code for downloading is posted):
<?php $url = implode($_POST); $file = file_get_contents($yes); header("Content-Disposition:attachment;filename=1.flv"); echo $file; ?>
or:
<?php $url = implode($_POST); header("Content-type:video/mpeg4"); header("Content-Disposition:attachment;filename=1.flv"); readfile($url); exit; ?>
Then the 1.flv file was successfully downloaded, but it did not work after downloading. It can be played. Use linux to download it directly from wget http://a.com/1.flv and you can play it. When opening the direct download through PHP, an error will appear:
Comparing the file size, it is found that there are 3 more bytes that cannot be played:
Then vim editor found that there are indeed 3 more bytes at the beginning of the file, but I don’t know how many there are, but you can play it by deleting these 3 bytes:
I searched online and couldn’t find the answer, and I couldn’t find anything about this. . I really don’t know what the problem is. Can a god help me to answer it = =
Solution:
These three characters are the legendary BOM
Indicate that the php file you are using to download is in UTF- format 8 with BOM, use Notepad++ to take a look,
or read out all your php files and then remove them?
/** * 移除字符串的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; }
Related articles:
PHP method to convert video to MP4 and get video preview
php method to use memcoder to convert video to mp4 format
PHP+FFMPEG to automatically convert video Encoded into H264 standard Mp4 file