我目前正在尝试创建一个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脚本没有输出视频内容的原因是什么?
答案 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小时的标题,以及大多数人似乎忘记的“内容长度”标题。