PHP没有输出视频的原因是什么?

时间:2014-09-20 19:57:27

标签: php html video ffmpeg

我目前正在尝试创建一个PHP文件,在该文件中,它可以输出不在public_html下的视频。我一直在使用以下PHP脚本输出视频:

<?php

//PHP script to output videos

//Full version of file does a lot of database stuff

//Get $path of file

header('Content-type: video/mp4');
header('Content-Length: '.filesize($path)); // provide file size

$contents = file_get_contents($path);
echo $contents;
//I also tried readfile($path) with the same results

我怀疑它是我的服务器。所以,我试图直接查看同一个视频文件(www.site.com/video.mp4)。直接做得很好。

最初,这很好用。直到最近它才起作用。我不确定这是否是我在服务器上安装的东西。我记得对php.ini进行了一些更改,也许是.htaccess(或其他一些隐藏在其中的设置),这让我觉得它与此有关。 php.ini和/或.htaccess(或类似于php.ini和.htaccess的任何其他隐藏设置文件)中是否有我需要更改的内容?

现在,我只是在桌面浏览器上测试我的网站。我在Chrome和Firefox上测试了这个,他们给了我相同的结果。我尝试使用ffmpeg将我的视频转换为许多不同的视频格式,但结果相同(可以直接播放,无法通过php脚本播放)。

当我打开php文件时,控制台没有错误。

我的PHP脚本没有输出视频内容的原因是什么?

1 个答案:

答案 0 :(得分:0)

这是从php fread网站复制的一些代码,正如他所提到的那样具有这些功能

 if ($file = fopen($path, 'rb')) {
    while(!feof($file) and (connection_status()==0)) {
      print(fread($file, 1024*8));
      flush();
    }
    fclose($file);
  }
  • 适用于大文件,每次传输仅使用8KB缓冲区。

  • 如果客户端断开连接,则停止传输(与许多脚本不同,继续读取和缓冲整个文件,浪费宝贵资源)但不会停止脚本

  • 如果传输完成则返回TRUE,如果客户端在完成下载之前断开连接则返回FALSE - 您经常需要这样做,因此您可以正确记录下载。

  • 发送一些标题,包括确保在任何浏览器/代理上最多缓存2小时的标题,以及大多数人似乎忘记的“内容长度”标题。

https://php.net/fread