【php】php使用exec总结

exec( )基础介绍

exec()函数用来执行一个外部程序

开启exec()函数:

exec()函数是被禁用的,要使用这个函数必须先开启。

  • 首先是 要关掉 安全模式 safe_mode = off  (若safe_mode=off,下边就不需要看了)
  • 然后在看看 禁用函数列表 disable_functions = proc_open, popen, exec, system, shell_exec, passthru   这里要把 exec 去掉,重启 apache 就OK了。
  • safe_mode_exec_dir=

exec()函数基本用法:

exec ( string $command [, array &$output [, int &$return_var ]] );

$command:表示要执行的命令。

$output:如果提供了 output 参数, 那么会用命令执行的输出填充此数组, 每行输出填充数组中的一个元素。 数组中的数据不包含行尾的空白字符,例如 \n 字符。 请注意,如果数组中已经包含了部分元素,exec() 函数会在数组末尾追加内容。如果你不想在数组末尾进行追加, 请在传入 exec() 函数之前 对数组使用 unset() 函数进行重置。

$return_var:如果同时提供 output 和 return_var 参数, 命令执行后的返回状态会被写入到此变量。(0为成功,其他值为失败)

exec( )使用

在php中使用了该方法,在浏览器中没有反应,但是在控制台直接执行命令是可以的。 将命令写在test.php文件内,在控制通过命令 php test.php执行也是成功的。(该现象应该是CGI模式下和CLI模式下执行的区别)

用浏览器执行,就只能是CGI模式,cli需要在终端执行

exec('mysql -u root -proot -Dtest<test.sql',$out,$status);

这样写是不会显示错误信息的,可在命令后边添加 “2>&1” 将错误显示出来。如下: 

exec('mysql -u root -proot -Dtest<test.sql 2>&1',$out,$status);

还有在php执行返回错误为乱码,在控制台执行可以正确显示的问题,有待学习

 

发布了11 篇原创文章 · 获赞 4 · 访问量 2万+
展开阅读全文

关于phpexec()函数的问题

12-28

下面是代码 <?php header('Content-type:text/json'); result($_POST['arfcn1'],$_POST['arfcn2'],$_POST['arfcn3'],$_POST['arfcn4'],$_POST['arfcn5']); function result($arfcn1,$arfcn2,$arfcn3,$arfcn4,$arfcn5){ $mysqli = mysqli_connect("localhost", "root", "admin", "smshack"); $sql = "select fale from sys"; $result = $mysqli->query($sql); $total = $result->num_rows; $result = $mysqli->query("SELECT * FROM `sys` "); $row = mysqli_fetch_array($result,MYSQLI_ASSOC ) ; $arv="cd /bin/;sudo sh -c './sniff ".$arfcn1." ".$arfcn2." ".$arfcn3." ".$arfcn4." ".$arfcn5." "." 2>&1 &'"; echo json_encode($arv); //扫描中 } ?> ``` ``` 关于php的exec()函数的问题 着段代码里我调用php的exec()函数。$arfcn....为传入的参数.. 实际代码为 [code=php] exec("cd /bin/;sudo sh -c './sniff 649 71 62 518 635 2>&1 &'"); [/code] 程序sniff是我写的一个C程序,在shell里直接输入 cd /bin/;sudo sh -c './sniff 649 71 62 518 635 2>&1 &‘ ``` ``` 则是正常,接收的参数“649”、“71”、“62”、“518”、635“都是正常。。 但是在php的exec函数里调用它,也就是前面那一句php代码则出现问题。。传入给sniff的参数“649”、“71”、“62”、“518”、635“ 变成了”SUDO_GID=33“、”MAIL=/var/mail/root“、”MAIL=/var/mail/root“、” HOME=/root“、”SUDO_GID=33“。 这是啥个情况噢。。头疼死了,, 还有exec("reboot")则正常重启,这说明相关权限已经有了.. 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览