【发布时间】:2012-12-23 12:45:17
【问题描述】:
我有一个视频文件,我需要使用函数而不是直接链接来获取它。 当我查看直接链接的视频页面代码时,这是我在屏幕上看到的:
但是当我使用我的功能时,首先视频不会运行,当我查看代码时,会出现:
我意识到这是同一个文件,相同的字符,但中间有许多 \0 字符。这些是黄色的。
这是我正在使用的代码:
$file_name = --path to file--;
$file_size = filesize($file_name);
$ctype = 'video/mp4';
header('Content-Type: '.$ctype);
header('Content-Length: ' . $file_size);
header("Accept-Ranges: bytes");
header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
header('Pragma: no-cache');
$file = fopen($file_name, 'rb');
$read = fread($file, $file_size);
print($read);
fclose($file);
exit;
我需要更改代码吗?有什么东西可以让 fread 正确读取文件吗? 还是我需要对要显示的文件进行某种处理?
【问题讨论】:
-
NUL 字节存在于原始文件中,但您的浏览器不会显示它们,因为它们是 NUL 字节并且没有任何东西可以将它们呈现为。他们应该在那里。为什么你认为你需要删除它们?
-
另请注意,由于您的代码没有努力处理字节范围,您应该删除
header("Accept-Ranges: bytes");行 -
因为视频没有显示所以数据肯定有问题。
-
@Martin curl 如何以任何方式应用于上述代码示例?
-
@Sarah 尝试使用
readfile()而不是fopen()/fread()/fclose()- 已经说过没有真正的原因为什么您的代码不应该工作(假设文件路径是正确) - 您应该(一次)确保display_errors关闭,以防 PHP 错误损坏文件。如果您在查看时遇到问题,请使用 VLC 打开它并在此处显示错误控制台中出现的消息。