php-fpm无法运行exec,system,shell_exec,只有CLI

时间:2015-03-26 06:21:04

标签: nginx exec php openbsd

php-fpmnginx exec在使用时.phpfiles() shell_exec() system()可以在命令行中正常工作。

运作良好的示例:

#php myphp.php

myphp.php包含:

<?php
exec('ping -c 3 google.com', $output);
print_r($output);
?>

但如果我点击浏览器http://localhost/myphp.php,它就不再有用了。

有什么想法吗? 我编辑

我制作了一个包含以下内容的文件:

#cat info.php

<?php
if(function_exists('exec')) {
    echo "exec is enabled";
}
    phpinfo();
?>

在我的浏览器中,打印

  

exec已启用,y php info ..

我制作了一个包含以下内容的文件:

#cat info.php

<?php 
// Check for safe mode
if( ini_get('safe_mode') ){
    // Do it the safe mode way
echo "Do it the safe mode way";
}else{
    // Do it the regular way
echo "Do it the regular way";
}

?>

在我的浏览器中,打印

  

以常规方式执行

我不想知道我是否坐牢?

在我的php ini中

#cat /etc/php-5.5.ini

safe_mode未显示,或ON或OFF。 根本就不存在

3 个答案:

答案 0 :(得分:0)

我认为你的php.ini中禁用了exec和那些函数。您可以通过

进行检查
if(function_exists('exec')) {
    echo "exec is enabled";
} else {
    echo "exec is disabled";
}

打开php.ini并导航到disable_functions

部分

如果exec列在那里,请删除它。

然后重新启动php-fpm

此外,如果启用了安全模式,则此功能将不可用。你需要禁用它。

修改

使用ping的完整路径。您可以通过在shell which ping

中发出此命令来找到它

修改

<?php
exec('/sbin/ping -c3 google.com', $output);
print_r($output);
?>

答案 1 :(得分:0)

Php-fpm在OpenBSD上默认是chroot。这可能是你看到它在cli而不是网络上工作的原因。

你有两个解决方案。禁用chroot(在chroot = /var/www上注释/etc/php-fpm.conf行)或修复您可能遇到的问题。

ping的静态编译版本位于/bin/ping下(来自chroot内部)。您需要在chroot中复制/etc/hosts/etc/resolv.conf才能解析主机名称(因为您正在尝试ping谷歌)。 您计划调用的所有其他系统命令也必须复制到chroot内(与其共享库一起或静态编译)。

使用ldd(1)找出您需要的库。 取决于你想要实现的目标,这可能是一项乏味的工作。

正如其他用户指出的那样,exec,system和shell_exec可能已被禁用。

答案 2 :(得分:0)


<?php
//echo "Вот-вот... ещё 1 мин";
//echo "Wait... 1 min";
echo exec('/bin/bash --login -c "cd /var/www/194.7.2.2/public && /usr/local/rvm/rubies/ruby-2.5.3/bin/ruby work1.rb "'.$_GET['some_value']);

它工作了4me!