exec函数在PHP中不起作用

时间:2015-06-29 09:45:26

标签: php linux ubuntu lamp

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

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您需要执行以下步骤。

  • 首先检查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在上述disable_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 Manager,单击“系统PHP-FPM配置”选项卡,然后转到“禁用的功能”。现在从这里删除执行程序。

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

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