exec函数在PHP中不起作用

问题描述 投票:1回答:3

在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”);给我正确的输出。

php linux ubuntu lamp
3个回答
2
投票

您很可能需要为命令提供文件的完整路径,因为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");

aconv检查which aconv的正确路径。

要检查是否有任何错误,请在exec命令中添加第二个参数并将其打印出来:

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

0
投票

好的,这是一个文件权限问题。 www-data在更改其现在正在使用的权限后没有写入文件的权限。


0
投票

您需要按照以下步骤操作。

  • 首先检查exec()函数是否存在。 if(function_exists('exec')){ echo 'Function exists'; }else{ echo 'Function does not exists'; }
  • 如果它存在,那么您的exec代码中可能会出现语法错误。如果它不存在,请使用下面给出的函数检查它是否在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 Panel

  • exec可能未在php.ini文件的disable_functions中列出。
  • 从WHM Panel登录,转到MultiPHP Manager,单击System PHP-FPM Configuration选项卡,然后转到Disabled Functions。现在从这里删除exec。
  • 删除后保存并重启PHP-FPM。
  • 如果您没有WHM Panel访问权限,则可能无法使用此功能。因此,请求您的托管服务提供商仅为您的帐户访问shell和exec。
© www.soinside.com 2019 - 2024. All rights reserved.