php exec在linux中返回值不能为负数

我们先来了解一下关于exec函数的使用方法

exec() 原型:string exec (string command [, string array [, int return_var]]) 

exec ()函数与system()类似,也执行给定的命令,但不输出结果,而是返回结果的最后一行。虽然它只返回命令结果的最后一行,但用第二个参数array 可以得到完整的结果,方法是把结果逐行追加到array的结尾处。所以如果array不是空的,在调用之前最好用unset()最它清掉。只有指定了第二 个参数时,才可以用第三个参数,用来取得命令执行的状态码。 

例子:

  1. exec("/bin/ls -l");  
  2. exec("/bin/ls -l"$res);  
  3. exec("/bin/ls -l"$res$rc); 

第三个参数, 怎么不能接收负数??这里的&$return_var就是程序返回值,起初我的回答是可以为负数,一般在C语言里我们会这样写

  1. #include <stdio.h> 
  2. #include <stdlib.h> 
  3. int main() 
  4.     printf("^_^n"); 
  5.     return -5; 

这个-5就是返回值,但习惯上是写成0或者1的。

注意:很多人的C代码里把main函数写成 void main() 这样实际上是不对的,详细的就不说了。

把上面的代码编译后,到CMD下运行,然后就能看到输出结果了。接着,输入“echo %ERRORLEVEL%”,回车,就可以看到程序的返回值了。这个%ERRORLEVEL%就代表了程序的返回状态。在WIN下确实是可以为负数的,php调用也是正常的。

  1. E:devphp535>php -r "exec('return.exe',$out,$a);var_dump($a);" 
  2. int(-2) 

但是到了linux下,始终为正数,刚开始怀疑是权限问题,用了chmod +x后,排除了权限问题。

  1. exec("/home/wwwroot/test/rtest.out 2>&1",$out,$a); 
  2. var_dump($out,$a); 
  3. array(1) { [0]=> string(3) "^_^" } int(251)  

看起来成了256+return val,可以看到实际上返回了负数,只不过被转换成正数了,接着看了下standard/exec.c里的源代码,没发现啥端倪,干到很奇怪,突然想到自己忘了一步,忘了看程序返回给OS的值了.可以使用echo $? 显示最后命令的推出状况。

  1. -bash-3.00$ vi main.c 
  2. -bash-3.00$ gcc -o ./mm main.c 
  3. -bash-3.00$ ll 
  4. total 48 
  5. drwxr-xr-x  3 www www 4096 May  4  2011 2011 
  6. drwxr-xr-x  6 www www 4096 Jun 23  2011 eoc 
  7. -rwxr-xr-x  1 www www 7131 Feb  1 12:47 hello 
  8. -rw-r–r–  1 www www    3 Feb  1 12:51 hello.c 
  9. -rw-r–r–  1 www www   99 Feb  1 12:50 main.c 
  10. -rwxr-xr-x  1 www www 4714 Feb  1 12:51 mm 
  11. drwxr-xr-x  3 www www 4096 Jun 24  2011 test 
  12. -bash-3.00$ ./mm 
  13. ^_^ 
  14. -bash-3.00$ echo $? 
  15. 251 
  16. -bash-3.00$  

这样就可以看看exec返换给OS的值是多少。

在linux下,这个返回值就是无符号类型,返回的是一个正数,所以传给php也是正数了,php实际上也是调用的exec所返回的值。

OUT了,也许linux就是这么规定的,程序中泰返回值为1~255区间,而自己不清楚这个规则。不过还没有确定是否linux里就是这么规定的。虽然问题很蛋疼,意义不大,不过也可以在这里留给遇到类似问题的人参考。不过到这里也没深究的必要了。谁要是真想彻底搞清楚,可以看看shell这块。

波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 本站源码并不保证全部能正常使用,仅供有技术基础的人学习研究,请谨慎下载
8. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » php exec在linux中返回值不能为负数

59 评论

  1. avodart over the counter cheap avodart order ondansetron 4mg online

  2. order sildenafil 100mg pills careprost tablet brand robaxin 500mg

  3. buy colchicine generic order colchicine roulette free play for fun

  4. real casinos online no deposit online casino buy cialis 10mg pills

  5. order sildenafil 100mg online cheap fildena 50mg cheap order rhinocort generic

  6. actos 15mg brand viagra cheap order viagra 50mg online

  7. buy montelukast 10mg without prescription buy singulair pill sildenafil cost

  8. casino games win real money free slots college essay writing help

  9. carvedilol 25mg price coreg usa amitriptyline 50mg canada

  10. generic cialis online pharmacy The elf elders were furosemide dosing cold meds safe for transplant and high blood pressure also completely stunned

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡