You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过XAMPP中Apache服务器内的PHP文件播放服务器外硬盘存储的视频

问题原因

原来的代码无法运行有两个核心原因:

  • 你输出的file://E:/Vtest/Fle.mp4是本地文件协议,浏览器访问Apache提供的http页面时,会尝试读取访问网站的用户自己设备的E盘文件,不是你服务器上的E盘文件
  • 浏览器安全策略默认禁止http协议的网页加载本地file协议的资源,就算是你本地测试自己访问自己的服务,也会被拦截
方案1:配置Apache别名(推荐,性能最优)

不需要PHP做额外处理,直接让Apache代理外部目录的文件请求,适合绝大多数场景
操作步骤:

  1. 打开XAMPP控制面板,点击Apache行的Config按钮,选择httpd.conf打开配置文件
  2. 在配置文件末尾添加以下内容:
# 把/vtest路径映射到E盘的Vtest目录
Alias /vtest "E:/Vtest/"
<Directory "E:/Vtest/">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Require all granted
</Directory>
  1. 保存配置文件,重启Apache服务
  2. 修改你的播放页面代码即可:
<?php
$src = "/vtest/Fle.mp4";
?>
<video  src="<?php echo $src;?>" autoplay controls style="width:50%;height:50%;"></video>
方案2:PHP代理输出文件(适合需要做权限控制的场景)

如果不想修改Apache配置,或者需要给视频访问加登录校验等逻辑,可以用PHP读取外部文件再输出给前端

  1. 新建video_proxy.php文件,放在Apache网站根目录下,代码如下:
<?php
// 配置允许访问的目录白名单,防止路径遍历漏洞
$allowed_dir = 'E:/Vtest/';
$request_file = $_GET['filename'] ?? '';
// 校验文件路径合法性
$real_path = realpath($allowed_dir . $request_file);
if (!$real_path || strpos($real_path, $allowed_dir) !== 0 || !is_file($real_path)) {
    http_response_code(404);
    exit('文件不存在');
}
// 输出正确的响应头
$mime = mime_content_type($real_path);
header('Content-Type: ' . $mime);
header('Content-Length: ' . filesize($real_path));
// 输出文件内容
readfile($real_path);
exit;
?>
  1. 修改你的播放页面代码:
<?php
$src = "video_proxy.php?filename=Fle.mp4";
?>
<video  src="<?php echo $src;?>" autoplay controls style="width:50%;height:50%;"></video>

注意:如果是大于1G的大视频,建议优化proxy代码支持断点续传,否则进度条拖动会失效。

内容的提问来源于stack exchange,提问作者Eng.Ismail

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 07:54:05