Home  >  Article  >  Backend Development  >  Flv file or mp4 file downloaded by php cannot be played

Flv file or mp4 file downloaded by php cannot be played

PHP中文网
PHP中文网Original
2017-03-24 09:55:373304browse

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(&#39;CCC&#39;,0xef,0xbb,0xbf)) //utf-8
        return substr($str, 3);
    elseif ($str_2 == pack(&#39;CC&#39;,0xfe,0xff) || $str_2 == pack(&#39;CC&#39;,0xff,0xfe)) //unicode
        return substr($str, 2);
    elseif ($str_4 == pack(&#39;CCCC&#39;,0x00,0x00,0xfe,0xff) || $str_4 == pack(&#39;CCCC&#39;,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

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn