首頁  >  文章  >  後端開發  >  php下載flv檔或mp4檔無法播放

php下載flv檔或mp4檔無法播放

PHP中文网
PHP中文网原創
2017-03-24 09:55:373284瀏覽

php下載flv檔案或mp4檔案無法播放

想透過POST傳輸flv播放位址或mp4播放位址然後直接下載,下載很容易,直接接收POST資料,POST過來的資料格式類似:http://a .com/1.flv,然後透過PHP下載,測試了兩種方法(只貼出來了用於下載的簡化程式碼):

<?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;
?>

然後成功下載1.flv文件,但是下載後不可以播放,使用linux直接wget http://a.com/1.flv下載的就可以播放。透過PHP直接下載的開啟就會出現錯誤:


對比檔案大小發現不可以播放的多了3個位元組:

然後vim編輯發現檔案開頭確實多了3個位元組,但是不知道怎麼多的,刪除這3個字節就可以播放:

網上找了找找不到答案,一點這方面的東西也找不到。 。實在不知道哪裡的問題了,大神幫忙解答一下吧= =

解決方法:

這三個字符,是傳說中的BOM啊

說明你用於下載的php文件,格式為UTF-php文件,格式為UTF-php文件,格式為UTF-php 8 with BOM,用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(&#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;
}

相關文章:

PHP實現將視頻轉成MP4並獲取視頻預覽圖的方法

php使用memcoder將視頻轉成mp4格式的方法

PHP+FFMPEG實現將視頻自動轉碼成H264標準Mp4檔案

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn