Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
exec函数在PHP中不起作用_Php_Linux_Ubuntu_Lamp - Fatal编程技术网

exec函数在PHP中不起作用

exec函数在PHP中不起作用,php,linux,ubuntu,lamp,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”);正在为我提供正确的输出。很可能需要为命令提供文件的完整路径,因为PH

在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中的当前目录与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
检查
aconv
的正确路径

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

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

好吧,这是一个文件权限问题。www data没有写入文件的权限,在更改权限后,它现在正在工作。

您需要按照以下步骤操作

  • 首先检查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());
    
    功能禁用\u功能(){
    $disabled=explode(',',ini_get('disable_functions');
    返回$disabled;
    }
    回声“;
    打印(禁用的函数());
    
    上面的函数将列出php.ini中的所有禁用函数

  • 如果上述禁用的函数()的输出中存在exec。然后转到/etc/php.ini并从禁用函数中删除exec

  • 保存php.ini文件后,重新启动php fpm。如果是Redhat/CentOS 7和Fedora。
    sudo systemctl重新启动php fpm

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

  • exec可能不会列在php.ini文件的禁用函数中

  • 从WHM面板登录,转到MultiHP Manager,单击系统PHP-FPM配置选项卡,然后转到禁用的功能。现在从这里移除exec

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

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


尝试使用passthru()而不是exec(),如果不工作,请检查当前用户(php)是否有权执行avconv并在文件夹中具有写入权限…exec可能在php.ini配置中被禁用,您是否能够检查这一点?如果你在共享主机上运行它,出于安全原因,它很可能会被禁用,所以他忘了提到文件在同一个目录中,我通过更改目录avconv位于/usr/bin/avconv来运行它,我尝试了类似这样的exec(“/usr/bin/avconv-I in.mp4-f mp3-ab 192000-vn rip.mp3”);或者如果我运行exec(“whoami”);也在工作fine@monir009,运行此操作的结果是什么<代码>执行(“…”,$result);var_dump($结果)