在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在更改其现在正在使用的权限后没有写入文件的权限。
您需要按照以下步骤操作。
if(function_exists('exec')){
echo 'Function exists';
}else{
echo 'Function does not exists';
}
function disabled_functions(){
$disabled = explode(',', ini_get('disable_functions'));
return $disabled;
}
echo "<pre>";
print_r(disabled_functions());
上面的函数将列出php.ini中的所有禁用函数。sudo systemctl restart php-fpm
如果您使用的是Cpanel和WHM Panel