【问题标题】:Is there a need for die; after print json_encode() when responding to api calls?有没有必要死?在响应 api 调用时打印 json_encode() 之后?
【发布时间】:2013-12-22 09:41:35
【问题描述】:

我正在创建各种“我的版本”的网络服务。基本上,它是一个有很多动作的 yii 控制器。每个动作如下

public function actionNameOfWebService()
{
   if(isset($_POST))
   {
      // do some processing, when I have a result... I do .. 
      print CJSON::encode('result.');
   }
   else
   {
      print CJSON::encode('only post methods allowed');
   }
}

许多这些操作都在一个特定的控制器中。一切正常……在我开始生产之前,我需要添加一个“模具吗?”每个 print CJSON::encode 语句之后的语句。

【问题讨论】:

  • 只有当你知道脚本不应该在当前行之后继续时才使用die()
  • 你应该使用Yii::app()->end();

标签: php json web-services yii die


【解决方案1】:

由于你使用的是 Yii,你应该简单地使用:

Yii::app()->end();

http://www.yiiframework.com/doc/api/1.1/CApplication#end-detail

【讨论】:

    【解决方案2】:

    没有。您绝对不需要dieexit。我认为使用它有点反模式。它破坏了封装。

    如果您设置了某种输出缓冲,die 实际上可能很糟糕。如果您正在代理请求,die 将杀死整个进程等。还有更多这样的场景。

    【讨论】:

    • 输出缓冲是什么意思?
    • 输出缓冲是PHP的一个特性php.net/manual/en/book.outcontrol.php
    • 我想投赞成票.. 但是.. 我没有权力!我选择了下面的答案作为答案,因为他回答了我真正怀疑的问题.. 但感谢输出缓冲位.. 我将阅读更多关于它的内容..
    【解决方案3】:

    您绝对应该使用Yii::app()->end();这是因为如果您有任何调试输出或分析输出,除非您告诉应用程序完成,否则它也会包含在响应中。如果您不包含此内容,您的验证可能会中断。

    【讨论】:

      【解决方案4】:

      您不必这样做,但是当您添加它时,您会确保在 JSON 之后不会打印任何内容,这会破坏解析器读取该数据的尝试。

      但如果你知道没有其他内容,你可以跳过它。

      【讨论】:

      • 所以我有一种直觉,没有别的了。但我更多地把它看作是一种预防措施。在任何 print CJSON::encode 方法之后..我知道应该没有更多了......可能是偶然我错过了检查条件并且过程继续进行,因此正如您提到的那样破坏接收器端的解析器。 . 所以我在想如果添加 die 会有所帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-23
      • 2022-07-22
      相关资源
      最近更新 更多