php 下载mp4,php下载flv文件或者mp4文件无法播放

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-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('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;

}

相关文章:

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值