5Aug/090
exec的返回值
php手册上讲的太简单了。例子也说的不是很详细,特别是如果不结合c++理解,非常容易搞错。我们结合一个简单的c++程序来看看,exec究竟是如何返回值的。
#include <iostream>
using namespace std;
int main()
{
cout << "first output\n";
cout << "second output\n"; #printf等输入也是一样的效果
return 0;
}
编译该程序g++ -o test test.cpp;在php中使用$retValue = exec("test",$arr,$ret);调用获得如下结果:
$retValue = "second output"; //返回输出的最后一行
$arr = array(0=>"first output",1=>"second output"); //获得所有的输出(以行为单位)并用数组保存
$ret = 0; //真正的返回值。
看到这些返回值应该明白exec是如何返回的了吧。很奇怪的是很多程序员都不用$ret判断程序是否执行成功,而是使用$retValue来判断,由于某些程序会报一些系统错误信息并输出,因此非常容易出错。在很多c++程序中,如果要返回多个值时,都是用类似cout/printf进行输出给php程序返回的。
提到exec,当然不能不提下它的兄弟shell_exec了。虽然和exec的返回值都是string类型,exec是返回最后一行的输出,而shell_exec输出所有输出。并按原有格式打印。比如 shell_exec('ls -al')和在命令行下执行"ls -al"是一个效果,就是获取屏幕输出。。比较完毕!