论坛首页 综合技术版 PHP

php执行外部程序函数解析

浏览 221 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2008-04-16 关键字: php, external program, 重定向
php中可以用来执行外部命令的函数或运算符有:
``//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 函数和重定向问题,下次再写
   
时间:2008-04-16
问:对于返回的非零值,是不是根据错误信息的不同而有所不同?有的资料说一般错误会返回13,而我的大多数程序遇到错误返回1.

问:如果程序执行错误,php应该如何捕获错误语句?

问:php调用标注程序和调用shell脚本有什么区别吗?
   
0 请登录后投票
时间:2008-04-16
xombat 写道
问:对于返回的非零值,是不是根据错误信息的不同而有所不同?有的资料说一般错误会返回13,而我的大多数程序遇到错误返回1.

这个是由执行的外部程序决定,外部程序返回什么值就是什么值,按照约定,成功执行是exit(0) 。
xombat 写道
问:如果程序执行错误,php应该如何捕获错误语句?

这个不好说,通常是返回的值不为0,即有错误,但是有的外部程序返回的值不对。另外,接受到的 output 实际上是 外部程序的stdout ,stderr 是没有的。可以用重定向解决 2>&1
xombat 写道
问:php调用标注程序和调用shell脚本有什么区别吗?

啥叫标注程序?
   
0 请登录后投票
时间:2008-04-18
catoc 写道

xombat 写道
问:php调用标注程序和调用shell脚本有什么区别吗?

啥叫标注程序?


抱歉,写错了,应该是“标准程序”,也就是非脚本的程序
   
0 请登录后投票
论坛首页 综合技术版 PHP

跳转论坛:
JavaEye推荐
    快速回复 引用上一条消息 (Alt+S)