如何制作PHP';s`exit(";reason";)`返回一个不是`0'的退出代码`

如何制作PHP';s`exit(";reason";)`返回一个不是`0'的退出代码`,php,exit,Php,Exit,我通常在编写我的PHPexit()时有一个原因(即exit(“您无权访问此页面”);),但我最近才注意到这会发送退出代码0 如何使exit在发送原因的同时发送1或更大的退出代码,同时避免使用以下psuedo代码 <?php if ($user->isAdmin() !== true) { echo "You are not authorised to access this page."; exit(1); } 我之所以要这样做,是因为当我使用exit时,它通

我通常在编写我的PHP
exit()
时有一个原因(即
exit(“您无权访问此页面”);
),但我最近才注意到这会发送退出代码
0

如何使
exit
在发送原因的同时发送1或更大的退出代码,同时避免使用以下psuedo代码

<?php
if ($user->isAdmin() !== true) {
     echo "You are not authorised to access this page.";
     exit(1);
} 
我之所以要这样做,是因为当我使用
exit
时,它通常意味着程序已经进入了一个阶段,在这个阶段,它需要自杀,因为出现了问题,或者没有得到授权。我想用它来监视脚本是否完全完成。

:

如果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);
}
:

如果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);
}


而不是使用代码退出,
抛出new\Exception(“使用自定义注释”)在工作时;它不会向用户显示消息,除非我将其放入
try{}catch(异常$e){echo$e->getMessage();}
-是否有较短的方法?因为我的原始帖子中的示例似乎更短,可读性更强。将主脚本方法包装到try block
try{doAll()}catch(异常$e){echo$e->getMessage();exit(1);}
中是一个很好的做法,如果是,您可能还希望创建一个错误处理程序,将PHP错误转换为异常。然后就有了一个真正干净的错误结构。但我认为我们已经开始偏离这个问题了……不是用代码退出,
抛出new\Exception(“用您的自定义注释”)在工作时;它不会向用户显示消息,除非我将其放入
try{}catch(异常$e){echo$e->getMessage();}
-是否有较短的方法?因为我的原始帖子中的示例似乎更短,可读性更强。将主脚本方法包装到try block
try{doAll()}catch(异常$e){echo$e->getMessage();exit(1);}
中是一个很好的做法,如果是,您可能还希望创建一个错误处理程序,将PHP错误转换为异常。然后就有了一个真正干净的错误结构。但我认为我们已经开始偏离这个问题了……我会等一等,看看其他人怎么说,尽管到目前为止这似乎是解决方案。为了遵守典型的控制台程序,您也可以向stderr写入内容,而不是echo:
file\u put\u contents('s)php://stderr“,”此文本转到STDERR“)
@ToBe,我设置它的方式是它像普通网页一样运行,但我也从命令行运行它来检查退出代码。我认为这对普通网页不起作用(但我还没有研究过)。这可能有用:
if(defined(“STDIN”))echo“we are consoleros!”我不知道这一点;谢谢继续话题:我想看看原始帖子上的
异常评论会怎么样。对我来说,这真的像是一个棘手的案子。但如果我找不到任何来源于它的东西,那就是普通的良好实践;我会接受这一点作为答案(因为真的没有任何其他答案)。但现在看来它仍然受到一些关注!我会等一会儿,看看其他人怎么说,不过到目前为止,这似乎是解决方案。为了遵守典型的控制台程序,您也可以向stderr写入内容,而不是echo:
file\u put\u contents('s)php://stderr“,”此文本转到STDERR“)
@ToBe,我设置它的方式是它像普通网页一样运行,但我也从命令行运行它来检查退出代码。我认为这对普通网页不起作用(但我还没有研究过)。这可能有用:
if(defined(“STDIN”))echo“we are consoleros!”我不知道这一点;谢谢继续话题:我想看看原始帖子上的
异常评论会怎么样。对我来说,这真的像是一个棘手的案子。但如果我找不到任何来源于它的东西,那就是普通的良好实践;我会接受这一点作为答案(因为真的没有任何其他答案)。但现在看来它仍然受到一些关注!