PHP 8 配置 FFmpeg 路径需确保 exec 类函数未禁用、ffmpeg 二进制文件权限正确且 PHP 进程可访问、代码中使用绝对路径并转义参数、Windows 下注意 PATH 和路径格式,四步缺一不可。

PHP 8 中配置 FFmpeg 路径不报错,关键不是“改 PHP 配置”,而是让 PHP 调用命令时能准确找到 ffmpeg 可执行文件,并绕过权限、禁用函数、路径拼接等常见拦截点。下面分四类场景说明怎么做才稳定。
确认 exec 类函数未被禁用
PHP 8 默认可能禁用 exec、shell_exec 等函数,尤其在宝塔、cPanel 或云主机环境。先检查:
- 运行
phpinfo(),搜索 disable_functions,确认列表里没有exec,shell_exec,system,proc_open - 或在脚本中执行:
echo ini_get('disable_functions');,输出为空或不含上述函数才安全 - 若被禁,需修改
php.ini(如宝塔在「软件管理 → PHP → 设置 → 配置修改」),删掉对应函数名,重启 PHP 服务
确保 ffmpeg 二进制文件可被 PHP 进程访问
Web 服务器(如 Nginx/Apache)以特定用户(如 www-data、nginx 或 apache)运行 PHP,该用户必须能执行 ffmpeg 文件:
- 终端执行
which ffmpeg,记下完整路径(如/usr/bin/ffmpeg或/opt/ffmpeg/bin/ffmpeg) - 检查权限:
ls -l /usr/bin/ffmpeg,应有-rwxr-xr-x(即其他用户可执行);若无,运行sudo chmod +x /usr/bin/ffmpeg - 验证该用户能否执行:
sudo -u www-data /usr/bin/ffmpeg -version,有版本输出即通过
PHP 代码中指定路径的两种可靠方式
不依赖系统 PATH,显式传入绝对路径更可控:
立即学习“PHP免费学习笔记(深入)”;
-
用 shell_exec/exec 直接调用:
$cmd = '/usr/bin/ffmpeg -i ' . escapeshellarg($input) . ' -vframes 1 ' . escapeshellarg($output) . ' 2>&1';注意:路径必须是绝对路径,且用escapeshellarg()包裹所有用户输入或变量 -
用 php-ffmpeg 库(推荐):
安装后创建实例时指定路径:
$ffmpeg = FFMpegFFMpeg::create([<br> 'ffmpeg.binaries' => '/usr/bin/ffmpeg',<br> 'ffprobe.binaries' => '/usr/bin/ffprobe',<br> 'timeout' => 3600<br> ]);
Windows 下额外注意环境变量与路径写法
若部署在 Windows(如 WAMP/XAMPP):
- 将 FFmpeg 的
bin目录(如C:fmpegin)加入系统 PATH,或在 PHP 脚本开头临时追加:putenv('PATH=' . __DIR__ . '\ffmpeg\bin;' . getenv('PATH')); - 路径中含空格或中文时,务必用双引号包裹整个命令,且仍需
escapeshellarg()处理参数 - 避免使用反斜杠
直接拼接路径(易被转义),统一用正斜杠/或str_replace('\', '/', $path)



















