exec()
原型:string exec (string command [, string array [, int return_var]]) exec()函数与system()类似,也执行给定的命令,但不输出结果,而是返回结果的最后一行。虽然它只返回命令结果的最后一行,但用第二个参数array可以得到完整的结果,方法是把结果逐行追加到array的结尾处。所以如果array不是空的,在调用之前最好用unset()最它清掉。只有指定了第二个参数时,才可以用第三个参数,用来取得命令执行的状态码。 例子: exec("/bin/ls -l");
exec("/bin/ls -l", $res); exec("/bin/ls -l", $res, $rc); passthru() 原型:void passthru (string command [, int return_var]) passthru()只调用命令,不返回任何结果,但把命令的运行结果原样地直接输出到标准输出设备上。所以passthru()函数经常用来调用象pbmplus(Unix下的一个处理图片的工具,输出二进制的原始图片的流)这样的程序。同样它也可以得到命令执行的状态码。 例子: header("Content-type: image/gif");
passthru("./ppmtogif hunte.ppm"); 2.2. 用popen()函数打开进程 上面的方法只能简单地执行命令,却不能与命令交互。但有些时候必须向命令输入一些东西,如在增加Linux的系统用户时,要调用su来把当前用户换到root才行,而su命令必须要在命令行上输入root的密码。这种情况下,用上面提到的方法显然是不行的。 popen()函数打开一个进程管道来执行给定的命令,返回一个文件句柄。既然返回的是一个文件句柄,那么就可以对它读和写了。在PHP3中,对这种句柄只能做单一的操作模式,要么写,要么读;从PHP4开始,可以同时读和写了。除非这个句柄是以一种模式(读或写)打开的,否则必须调用pclose()函数来关闭它。 例子1 $fp=popen("/bin/ls -l", "r");
例子2 /* 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); 3. 养成良好的程序风格 在很多情况下PHP最可贵的特点也可能是它最薄弱的环节就是它的语法松散性。 PHP能够如此广泛的被使用,因为它使得许多没有经验的Web开发者能够制作出强大的应用程序,而用不着过多的考虑规划、连贯性和文档。不幸的是,正是以上的特点,很多的PHP源代码很臃肿,很难阅读甚至无法维护。决定代码可维护性的重要因素是代码的格式和注释。一个工程的所有代码应该以贯穿始终的形式组织。以下介绍的是如何在PHP程序中养成良好的程序代码风格。 3.1. 缩进 开发者所有的代码应该完全按照缩进的方式书写。这是提高代码可读性最基本的措施。即使你没有注释你的代码,缩进对于让其他人读懂你的代码也是非常大的帮助。 3.2. 增加注释 在编程时添加注释是一个好的习惯.PHP 允许在页面代码中添加注释,具体的注释方法与C语言注释语法相同,在脚本中可以加注释。可以用 "/*" 和 "*/" 来注释一段话。可用双斜杠“//”作为注释符。 3.3. 控制结构 这个很大程度上取决于个人口味。我仍然可以看到很多的控制结构代码不带分支语句造成可读性非常差,如???你使用IF语句时不带分支,不但可读性变差,当其他人修改你的程序时,还会造成很多的bug。请看下例: 不好的例子: if ($a == 1) echo 'A was equal to 1';
这是非常难以辨认的。它能够正常工作,但是除了你之外,别人根本不会赞赏这句代码。 有改进的例子: if ($a == 1)
echo 'A was equal to 1'; 现在至少这句代码可以读懂了,但是仍然没有很好的可维护性。如果当$a==1的时候我希望一个附加的事件发生,或者需要添加分支呢?如果后来的程序员忘记了添加大括弧或者else关键字,那么程序中将出现bug。 完美的例子 if (($a == 1) && ($b==2)) {
echo 'A was equal to 1'; //很容易的可以添加其他代码 } elseif (($a == 1) && ($b==3)) { //其他操作 } 请注意在if和elseif后面的空格,这会将本语句和函数调用区分开来,此外,虽然在elseif的执行程序段中没有语句,只有注释,表面上显得多余可是却给以后维护程序的程序员给予了非常方便的提示,并且非常利于添加功能。 3.4. 利用 Include 来实现功能模块化 可以将常用的功能函数存于一个PHP文件,在其它PHP页中要用其中的功能时,将包含函数的PHP文件包含在调用函数的PHP文件中.这时可使用 Include 函数。具体语法为: include($FileName); 使用时应该注意: 1、应避免自包含,即 File1 包含 File1;在多个文件中有包含语句时,应避免间接自包含即循环包含,如File1包含File2,File2包含File3,File3包含File1. 2、被包含的脚本语言的类型必须是PHP语言类型或脚本语句段。 (责任编辑:admin) |