2008-04-16
php执行外部程序函数解析
关键字: php, external program, 重定向
php中可以用来执行外部命令的函数或运算符有:
其中:
对于任何函数的ret_val(int 类型),如果正常执行,那么返回0,否则返回非零。
问:对于返回的非零值,是不是根据错误信息的不同而有所不同?有的资料说一般错误会返回13,而我的大多数程序遇到错误返回1.
问:如果程序执行错误,php应该如何捕获错误语句?
问:php调用标注程序和调用shell脚本有什么区别吗?
更复杂的proc_open 函数和重定向问题,下次再写
``//backtick operator string shall_exec(string cmd); string exec(string cmd, array &output, int &ret_val); string system(string cmd, int &ret_val); void passthru(string cmd, int &ret_val);
其中:
- backtick操作符和shall_exec函数完全相同,都是执行后,返回输出结果(注意没有返回程序的返回值)。
- system和passthru都会自动打印输出,但是passthru更适合返回大量数据,因为它不需要返回任何信息,所以能直接将数据发送到客户端,用php手册中的原话是:引用If you need to execute a command and have all the data from the command passed directly back without any interference, use the passthru() function.这就是system和passthru仅有的不同点。
- exec函数不会打印输出,但是它能将输出按照行放到一个数组里面,而返回值是这个数组的最后一个元素(也就是输出的最后一行)。
对于任何函数的ret_val(int 类型),如果正常执行,那么返回0,否则返回非零。
问:对于返回的非零值,是不是根据错误信息的不同而有所不同?有的资料说一般错误会返回13,而我的大多数程序遇到错误返回1.
问:如果程序执行错误,php应该如何捕获错误语句?
问:php调用标注程序和调用shell脚本有什么区别吗?
更复杂的proc_open 函数和重定向问题,下次再写


评论
啥叫标注程序?
抱歉,写错了,应该是“标准程序”,也就是非脚本的程序
这个是由执行的外部程序决定,外部程序返回什么值就是什么值,按照约定,成功执行是exit(0) 。
这个不好说,通常是返回的值不为0,即有错误,但是有的外部程序返回的值不对。另外,接受到的 output 实际上是 外部程序的stdout ,stderr 是没有的。可以用重定向解决 2>&1
啥叫标注程序?
问:如果程序执行错误,php应该如何捕获错误语句?
问:php调用标注程序和调用shell脚本有什么区别吗?