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未显示,或者打开或关闭。根本不存在
发布于 2015-03-26 22:24:06
我认为exec和这类功能在你的php.ini中是被禁用的。你可以通过以下方式查看
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);
?>
发布于 2015-09-09 00:11:58
Php-fpm在OpenBSD上默认是chrooted。这可能是你看到它在cli上工作而不是在web上工作的原因。
你有两个解决方案。禁用chroot (注释/etc/php-fpm.conf
上的chroot = /var/www
行)或修复可能遇到的问题。
ping的静态编译版本驻留在/bin/ping
下(从chroot内部)。您需要在chroot中复制/etc/hosts
和/etc/resolv.conf
,以便解析主机名称(就像您试图对google执行trying操作一样)。您计划调用的所有其他系统命令也必须复制到chroot中(以及它们的共享库或静态编译)。
使用ldd(1)
找出您需要哪些库。根据你试图实现的目标,这可能是一项乏味的工作。
正如其他用户指出的那样,Exec、system和shell_exec可能已禁用。
发布于 2019-02-06 01:43:26
<?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!
https://stackoverflow.com/questions/29272233
复制相似问题