如何使PHP退出("原因")`返回不是0的退出代码

时间:2014-06-12 13:56:10

标签: php exit

我通常使用原因(即exit())对我的PHP exit("You are not authorised to access this page");进行编码,但我最近才注意到这会发送退出代码{ {1}}。

如何让0发送退出代码为1或更高,同时仍然发送原因,但避免使用以下伪代码。

exit

重现此问题的代码;虽然它可能没有必要。 (在CLI中,但在网页上也是如此)

<?php
if ($user->isAdmin() !== true) {
     echo "You are not authorised to access this page.";
     exit(1);
} 

我想这样做的原因是因为当我使用zarthus@zarth:~$ php -r "exit(1);" zarthus@zarth:~$ echo $? 1 zarthus@zarth:~$ php -r "exit('a reason');" zarthus@zarth:~$ echo $? 0 时,通常意味着程序已经进入了一个需要自行解决的阶段,因为出了问题,或者没有被授权。我想将此用于监控目的,以查看脚本是否完全完成。

1 个答案:

答案 0 :(得分:4)

From the documentation

  

如果status是一个字符串,则此函数在退出之前打印状态。

     

如果status是整数,则该值将用作退出状态   而不是印刷。退出状态应该在0到254的范围内   退出状态255由PHP保留,不得使用。状态0   用于成功终止程序。

所以唯一的选择就是编写自己的退出函数:

function myExit($reason, $errorcode=1) {
  if(defined("STDIN")) {
    file_put_contents('php://stderr', $reason);
  } else {
    echo $reason;
  }
  exit($errorcode);
}