【问题标题】:I have installed FFMPEG and can't find it inside a PHP script我已经安装了 FFMPEG,但在 PHP 脚本中找不到它
【发布时间】:2020-03-08 10:25:10
【问题描述】:

我已经在 CentOS 中安装了 FFMPeg。它完美地工作。 它在 /usr/bin 目录中。另外,我有 Plesk 18.0.20 附带的 PHP 7.2.24。

我想在 PHP 脚本中使用 FFMPeg,但该脚本找不到 FFMpeg 的可执行文件。我试过给出确切的路线(/usr/bin/ffmpeg),但没有用。

这是一个生产服务器。相同的脚本,在我的开发服务器 (macOS) 中运行良好。

我尝试使用:

var_dump(getenv('PATH'));
var_dump(exec('which ffmpeg'));
var_dump(ini_get('open_basedir'));
var_dump(is_file(exec('which ffmpeg')));
var_dump(is_executable(exec('which ffmpeg')));

它还给我:

string(49) "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
string(0) ""
string(44) "/var/www/vhosts/name-of-the-domain.com/:/tmp/"
bool(false)
bool(false)
NULL

¿会发生什么?

我注意到一个非常奇怪的事情是我无法通过 php 访问任何命令: 我尝试将它与 echo 一起使用

var_dump(exec('which echo'));
var_dump(is_file(exec('which echo')));
var_dump(is_executable(exec('which echo')));

它还给我:

string(0) ""
bool(false)
bool(false)
NULL

而且权限是对的:

[root@vps bin]# ls -lha echo
-rwxr-xr-x 1 root root 33K ago 20 08:25 echo

[root@vps bin]# ls -lha ffmpeg
-rwxr-xr-x 1 root root 217K abr  4  2019 ffmpeg

但是如果我做一个

var_dump(exec('echo "HELLO"'))

它返回我

string(5) "HELLO"

【问题讨论】:

  • “我已经尝试给出确切的路线(/usr/bin/ffmpeg),但不起作用。” 究竟发生了什么?有什么错误?
  • 我正在使用 PHP-FFMPeg (github.com/PHP-FFMpeg/PHP-FFMpeg) 并返回此错误:“FFMpeg\Exception\ExecutableNotFoundException: Unable to load FFMpeg”

标签: php linux ffmpeg centos ffmpeg-php


【解决方案1】:

我认为使用 FFMPFG 和 php,最快的方法是使用 PHP-FFMPEG 包。 https://github.com/PHP-FFMpeg/PHP-FFMpeg 我认为这个问题似乎与执行权限有关。

你能尝试测试一下是否加载了 FFMPEG 吗?也许您的服务器上可能没有加载 PHP 扩展。

尝试添加此代码以测试是否加载了 ffmpeg

<?php if (! extension_loaded (ffmpeg)) exit ('ffmpeg was not loaded ');

【讨论】:

  • 谢谢。我没有说的是我没有使用 ffmpeg 扩展。正如你所说,我正在使用 PHP-FFMPeg (github.com/PHP-FFMpeg/PHP-FFMpeg)。它返回错误“FFMpeg\Exception\ExecutableNotFoundException:无法加载 FFMPeg”。 extension_loaded(ffmpeg) 也返回“false”
  • 权限也可以:每个人都可以执行ffmpeg
  • 我注意到一个非常奇怪的事情是我无法通过 php 访问任何命令:我尝试将它与 echo 一起使用(请参阅我之前编辑的帖子)
【解决方案2】:

检查您的服务器上是否安装了 PHP 扩展 Suhosin(使用 phpinfo)或 Security enhanced Linux(使用 sestatus)。

Suhosin 具有将函数列入黑名单的功能,SELinux 可能会因为文件上下文不匹配而禁止执行。

【讨论】:

  • 谢谢,但未安装 Suhoshin 扩展,并且 sestatus 已禁用
  • 好的。那么也许你的网络服务器(apache?)运行 chrooted?检查“mount”的输出以获取绑定挂载和网络服务器配置。
  • 你可以把phpinfo的输出贴到某个地方,我们可以查一下。
猜你喜欢
  • 2020-03-15
  • 1970-01-01
  • 2011-07-18
  • 1970-01-01
  • 2019-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多