php-fpm
,nginx
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。 根本就不存在
答案 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!