返回引起的Php Server错误?:“http”

时间:2012-01-09 01:14:59

标签: php http server-error

我是一个新手php,我遇到了一个问题,我希望有人可以帮我。

当我将包含以下内容的.php上传到我的服务器并在Chrome浏览器中加载时,似乎没有任何问题。

<?php

 class AppInfo {
   public static function getHome () {
   return ($_SERVER['HTTP_X_FORWARDED_PROTO'])."://" . $_SERVER['HTTP_HOST'] . "/";
 }  

}

但是,当我上传包含下面非常相似代码的.php文件时(区别在于存在?:“http”),chrome会返回服务器错误(粘贴在代码下方)

<?php
class AppInfo {
  public static function getHome () {
    return ($_SERVER['HTTP_X_FORWARDED_PROTO'] ?: "http") . "://" .    $_SERVER['HTTP_HOST'] . "/";
 }
}

错误:

服务器错误 网站在检索“Url”时遇到错误。它可能已关闭以进行维护或配置不正确。

2 个答案:

答案 0 :(得分:1)

您应该将其更改为

return ($_SERVER['HTTP_X_FORWARDED_PROTO'] ? $_SERVER['HTTP_X_FORWARDED_PROTO'] : "http") . "://" .    $_SERVER['HTTP_HOST'] . "/";

所以这意味着如果($_SERVER['HTTP_X_FORWARDED_PROTO']使用它,则使用http

答案 1 :(得分:0)

我相信你正试图使用​​所谓的ternary operator。此运算符需要以下语法:

(comparison statement) ? (what to do if true) : (what to do if false)

文档声明,只有在使用PHP 5.3或更高版本时,才可以省略中间子句(“如果为真,该怎么做”子句)。在我看来,这是不好的做法。我不知道任何其他允许该快捷方式的编程语言,它只会使您的代码读取更加困难(特别是如果您在编写它之后一年或更长时间阅读它)。最好编写(在可能的情况下)向后兼容的代码;结果会更加便携。

更新:我在维基百科上阅读了一些关于ternary operator的内容,其他一些语言也有这样的快捷方式(例如,存在C的GNU扩展)。我仍然认为使用快捷方式很糟糕;会出现声明评估导致副作用的情况。