本文目录导读:

- 含义一:你想录制“PHP 程序运行的过程/结果”为视频(例如用于教学演示)
- 含义二:你想通过 PHP 代码来控制“摄像头或服务器屏幕”并进行录制(服务端录制)
- 含义三:如果你想做一个“Web 网页端的录屏功能”(用户点击按钮录制网页)
- 总结建议
在 PHP 中直接“录屏”是不可能的,因为 PHP 是服务端脚本语言,它运行在服务器上,而你录屏的界面是客户端的浏览器或操作系统。
但根据你的需求,通常有 两种不同的含义,你可能是想实现其中之一:
你想录制“PHP 程序运行的过程/结果”为视频(例如用于教学演示)
如果是这种情况,其实你需要的是录制 浏览器画面(因为 PHP 的输出最终是 HTML 网页)。
推荐方案(最简单):
- 使用屏幕录制软件(OBS Studio):这是最专业的免费方案,打开浏览器运行你的 PHP 项目,然后用 OBS 录制你的整个屏幕或浏览器窗口。
- 使用浏览器插件:如
Loom、Screen Recorder(Chrome 插件),它们可以直接录制浏览器标签页,并附带麦克风声音。 - 使用 Gifcam / ScreenToGif:如果你只想录制一个几秒钟的小操作,生成 GIF 动图放到文档里,这个非常方便。
你想通过 PHP 代码来控制“摄像头或服务器屏幕”并进行录制(服务端录制)
如果你想在服务器端用 PHP 去抓取屏幕(如远程桌面监控、自动化演示),PHP 本身没有内置函数,但可以通过调用系统命令实现。
核心逻辑: 使用 exec() 或 shell_exec() 调用操作系统的录屏工具。
方案 A:使用 FFmpeg(最推荐,跨平台) FFmpeg 是强大的音视频处理工具,你可以通过 PHP 调用它来录制屏幕。
-
Windows(录制显示器):
<?php $output = shell_exec('ffmpeg -f gdigrab -framerate 30 -i desktop -c:v libx264 -preset ultrafast output.mp4 2>&1'); // 注意:这个命令会一直执行,直到你按下 Ctrl+C,或者你需要指定 duration ?>- 限制时长(录制 10 秒):
<?php $cmd = 'ffmpeg -f gdigrab -t 10 -framerate 30 -i desktop -c:v libx264 -preset ultrafast output.mp4 2>&1'; exec($cmd, $output, $status); if ($status === 0) { echo "录制成功!"; } ?>
- 限制时长(录制 10 秒):
-
Linux(录制 X11 屏幕):
<?php $cmd = 'ffmpeg -f x11grab -s 1920x1080 -t 10 -framerate 30 -i :0.0 -c:v libx264 output.mp4 2>&1'; exec($cmd, $output, $status); ?>
-
安装 FFmpeg:你需要确保服务器已经安装了 FFmpeg 并加入了环境变量。
方案 B:使用系统内置工具(Windows PowerShell) 如果是 Windows 服务器,可以用 PHP 调用 PowerShell 录屏,但非常依赖服务器环境,不如 FFmpeg 通用。
如果你想做一个“Web 网页端的录屏功能”(用户点击按钮录制网页)
如果你是想在自己的 Web 应用(由 PHP 提供数据)中添加录屏功能,必须借助 JavaScript(PHP 无法直接访问浏览器资源)。
推荐方案:MediaRecorder API
如果你想在浏览器端录制用户的屏幕,需要使用 JavaScript 的 getDisplayMedia() 和 MediaRecorder API,PHP 只负责接收前端上传的视频文件并保存。
前端核心代码(HTML + JS):
<button id="start">开始录制</button>
<button id="stop">停止录制</button>
<script>
let mediaRecorder;
let chunks = [];
document.getElementById('start').onclick = async () => {
const stream = await navigator.mediaDevices.getDisplayMedia();
mediaRecorder = new MediaRecorder(stream);
chunks = [];
mediaRecorder.ondataavailable = e => chunks.push(e.data);
mediaRecorder.onstop = () => {
const blob = new Blob(chunks, { type: 'video/webm' });
const formData = new FormData();
formData.append('video', blob, 'record.webm');
// 上传到 PHP 后端
fetch('upload.php', { method: 'POST', body: formData });
};
mediaRecorder.start();
};
document.getElementById('stop').onclick = () => mediaRecorder.stop();
</script>
后端 PHP 保存文件(upload.php):
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['video'])) {
$uploadDir = 'uploads/';
$filePath = $uploadDir . time() . '.webm';
move_uploaded_file($_FILES['video']['tmp_name'], $filePath);
echo "录制视频已保存: " . $filePath;
}
?>
总结建议
- 如果只是自己演示给同事看:直接用 OBS 录制屏幕最方便,不要写代码。
- 如果想在服务器上自动录制:安装 FFmpeg,通过 PHP 的
exec()执行命令。 - 如果想给用户提供“网页录屏”功能:用 JavaScript MediaRecorder,PHP 仅做文件接收。
你可以告诉我你具体的 使用场景(比如是教学、监控还是开发功能),我再帮你细化方案。