exec 函数在 PHP 中不起作用
exec function is not working in PHP
in 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
和 which aconv
的正确路径是什么。
要检查是否有任何错误,请将第二个参数添加到 exec
命令并打印它:
exec('...', $result);
var_dump($result);
好的,这是一个文件权限问题。 www-data 没有写入文件的权限,更改权限后现在可以使用了。
您需要按照以下步骤操作。
首先检查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.
中所有禁用的函数
如果上述disabled_functions()的输出中存在exec。然后转到 /etc/php.ini 并从 disable_functions
中删除 exec
保存php.ini文件后重启php-fpm。如果是 Redhat/CentOS 7 和 Fedora。
sudo systemctl restart php-fpm
如果您使用的是 Cpanel 和 WHM 面板
执行文件可能未在 php.ini 文件的 disable_functions 中列出。
从 WHM 面板登录,转到 MultiPHP 管理器,单击系统 PHP-FPM 配置选项卡,然后转到禁用功能。现在从这里删除 exec.
删除后保存并重启PHP-FPM.
如果您没有 WHM 面板访问权限,您可能无法使用此功能。因此,请求您的托管服务提供商为您的帐户提供 shell 访问权限和执行权限。
in 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
和 which aconv
的正确路径是什么。
要检查是否有任何错误,请将第二个参数添加到 exec
命令并打印它:
exec('...', $result);
var_dump($result);
好的,这是一个文件权限问题。 www-data 没有写入文件的权限,更改权限后现在可以使用了。
您需要按照以下步骤操作。
首先检查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.
中所有禁用的函数
如果上述disabled_functions()的输出中存在exec。然后转到 /etc/php.ini 并从 disable_functions
中删除 exec
保存php.ini文件后重启php-fpm。如果是 Redhat/CentOS 7 和 Fedora。
sudo systemctl restart php-fpm
如果您使用的是 Cpanel 和 WHM 面板
执行文件可能未在 php.ini 文件的 disable_functions 中列出。
从 WHM 面板登录,转到 MultiPHP 管理器,单击系统 PHP-FPM 配置选项卡,然后转到禁用功能。现在从这里删除 exec.
删除后保存并重启PHP-FPM.
如果您没有 WHM 面板访问权限,您可能无法使用此功能。因此,请求您的托管服务提供商为您的帐户提供 shell 访问权限和执行权限。