【问题标题】:exec function is not working in PHPexec 函数在 PHP 中不起作用
【发布时间】:2015-06-29 09:45:25
【问题描述】:

在 php exec 函数中无法运行 shell 命令。

如果我在终端运行

   $ avconv -i in.mp4 -f mp3 -ab 192000 -vn rip.mp3 

该命令运行良好,该命令用于将视频转换为 mp3。 但是当我尝试通过 PHP 执行时,它就不起作用了。

   exec("avconv -i in.mp4 -f mp3 -ab 192000 -vn rip.mp3");

或者如果我尝试 exec("whoami");给了我正确的输出。

【问题讨论】:

  • 尝试使用passthru()代替exec(),如果不行,检查当前用户(php)是否有执行权限avconv 并在文件夹中具有写入权限...
  • exec 可能在您的 php.ini 配置中被禁用,您能检查一下吗?如果您在共享主机上,出于安全原因很可能会禁用它

标签: php linux ubuntu lamp


【解决方案1】:

您很可能需要为命令提供文件的完整路径,因为 PHP 中的当前目录与您的 shell 中的不同。

exec("avconv -i /path/to/in.mp4 -f mp3 -ab 192000 -vn /path/to/rip.mp3");

为了安全起见,甚至可能是到 aconv 的完整路径:

exec("/bin/avconv -i /path/to/in.mp4 -f mp3 -ab 192000 -vn /path/to/rip.mp3");

which aconv检查aconv的正确路径是什么。

要检查任何错误,请在exec 命令中添加第二个参数并打印:

exec('...', $result);
var_dump($result);

【讨论】:

  • 哦忘了说文件在同一个目录下,我通过更改目录在终端运行它
  • avconv 在 /usr/bin/avconv 中,我尝试过类似 exec("/usr/bin/avconv -i in.mp4 -f mp3 -ab 192000 -vn rip.mp3") ;或者如果我运行 exec("whoami");也可以正常工作
  • @monir009,你运行这个的结果是什么? exec('...', $result); var_dump($result);
【解决方案2】:

好的,这是文件权限问题。 www-data 没有写文件的权限,修改权限后现在可以使用了。

【讨论】:

    【解决方案3】:

    您需要按照这些步骤操作。

    • 首先检查exec()函数是否存在。

      if(function_exists('exec')){
         echo 'Function exists';
      }else{
         echo 'Function does not exists';
      }
      
    • 如果存在,那么您的执行代码中可能存在语法错误。如果它不存在,请使用下面给出的函数在 php.ini 下将其禁用。

      function disabled_functions(){
        $disabled = explode(',', ini_get('disable_functions'));
        return $disabled;
      }
      echo "<pre>";
      print_r(disabled_functions());
      

      上面的函数会列出php.ini中所有的禁用函数。

    • 如果 exec 存在于上述 disabled_functions() 的输出中。然后转到 /etc/php.ini 并从 disable_functions

    • 中删除 exec
    • 保存 php.ini 文件后重启 php-fpm。对于 Redhat/CentOS 7 和 Fedora。 sudo systemctl restart php-fpm

    如果您使用的是 Cpanel 和 WHM 面板

    • exec 可能未列在 php.ini 文件的 disable_functions 中。

    • 从 WHM 面板登录,进入 MultiPHP 管理器,点击系统 PHP-FPM 配置选项卡,然后进入禁用功能。现在从这里删除 exec。

    • 删除后保存并重启PHP-FPM。

    • 如果您没有 WHM 面板访问权限,您可能无法使用此功能。因此,请向您的托管服务提供商请求 shell 访问权限,并仅为您的帐户执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-26
      • 2011-07-15
      • 1970-01-01
      • 2017-01-18
      • 1970-01-01
      • 2017-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多