2) 上面的方法只能简单地执行命令,却不能与命令交互。但有些时候必须向命令输入一些东西,如在增加Linux的系统用户时,要调用su来把当前用户换到root才行,而su命令必须要在命令行上输入root的密码。这种情况下,用上面提到的方法显然是不行的。
PoPen()函数打开一个进程管道来执行给定的命令,返回一个文件句柄。既然返回的是一个文件句柄,那么就可以对它读和写了。在PHP3中,对这种句柄只能做单一的操作模式,要么写,要么读;从PHP4 开始,可以同时读和写了。除非这个句柄是以一种模式(读或写)打开的,否则必须调用Pclose( )函数来关闭它。
例子1:
$#@60;? $fP=PoPen("/bin/ls -l", "r"); ?$#@62; |
例子2(本例来自PH P中国联盟网站httP://www.PhPx.com/show.PhP?d=col&i=51):
$#@60;?
/* PHP中如何增加一个系统用户
下面是一段例程,增加一个名字 为james的用户,
root密码是 verygood。仅供参考
*/
$sucommand = "su --login root --command";
$useradd = "useradd ";
$rootPasswd = "verygood";
$user = "james";
$user_add = sPrintf("%s "%s %s"",$sucommand,$useradd,$user);
$fP = @PoPen($user_add,"w");
@fPuts($fP,$rootPasswd);
@Pclose($fP);
?$#@62;
3) 用反撇号(`,也就是键盘上ESC键下面的那 个,和~在同一个上面)
这个方法以前没有归入PHP的文档,是作为一个秘技存在的。方法很简单,用两个反撇号把要执行的命令括起来作为一个表达式,这个表达式的值就是命令执行的结果。如:
$#@60;? $res=`/bin/ls -l`; echo "$#@60;b$#@62;$#@60;Pre$#@62;".$res."$#@60;Pre$#@62;$#@60;/b$#@62;"; ?$#@62; |
这个脚本的输出就象:
hunte.gif hunte.PPm jPg.htm jPg.jPg Passthru.PhP |