Mac系统XAMPP环境下PHP调用ffmpeg提示not found问题咨询
报错原因说明
sh: 1: ffmpeg: not found:XAMPP运行的Apache进程的环境变量PATH默认没有包含Homebrew的软件安装路径,和你本地终端用户的shell环境是隔离的,所以找不到你已经安装的ffmpeg。sh: 1: ./ffmpeg: Exec format error:你下载的静态构建包和你的Mac CPU架构不匹配,同时htdocs目录作为web服务根目录,运行权限受限,不适合放可执行文件。
解决方案(优先推荐第一种,无需修改配置)
方案1:直接使用ffmpeg绝对路径调用
- 打开本地终端,执行
which ffmpeg,获取brew安装的ffmpeg的绝对路径:- Intel Mac输出路径一般为:
/usr/local/bin/ffmpeg - Apple Silicon(M系列芯片)输出路径一般为:
/opt/homebrew/bin/ffmpeg
- Intel Mac输出路径一般为:
- 修改PHP代码,把ffmpeg替换为你拿到的绝对路径即可:
<?php echo "Starting ffmpeg"; // 下方路径替换为你自己执行which ffmpeg得到的结果 $ffmpeg_path = "/opt/homebrew/bin/ffmpeg"; $output = shell_exec("{$ffmpeg_path} -i test.mp3 -codec:a libmp3lame -b:a 128k out.mp3 2>&1"); echo "<pre>{$output}</pre>"; ?>
方案2:修改XAMPP环境变量,支持直接调用ffmpeg
如果你不想每次都写绝对路径,可以修改Apache的环境配置:
- 打开XAMPP的Apache配置文件:
/Applications/XAMPP/xamppfiles/etc/httpd.conf - 新增一行配置,将brew的bin目录加入PATH:
- Apple Silicon芯片添加:
SetEnv PATH "/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin" - Intel芯片添加:
SetEnv PATH "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
- Apple Silicon芯片添加:
- 重启XAMPP的Apache服务,之后代码中直接写
ffmpeg即可正常识别。
静态构建包适配方案
如果你需要使用官网静态包而不是brew版本,操作如下:
- 下载和你Mac CPU架构匹配的静态包:Apple Silicon选arm64版本,Intel选x86_64版本
- 解压后将ffmpeg二进制文件移动到
/usr/local/bin目录下,执行chmod +x /usr/local/bin/ffmpeg赋予执行权限 - 后续用
/usr/local/bin/ffmpeg绝对路径调用即可,不要将可执行文件放在htdocs目录下。
内容的提问来源于stack exchange,提问作者Alex Styl
相关产品推荐
相关产品推荐

