Ошибка Php-сервера, вызванная возвратом?: "Http" - PullRequest
0 голосов
/ 09 января 2012

Я новичок в 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 ]

1 голос
/ 09 января 2012

Вы должны изменить его на

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

Так что это будет означать, что если ($_SERVER['HTTP_X_FORWARDED_PROTO'] есть, используйте его, в противном случае используйте http.

0 голосов
/ 09 января 2012

Я полагаю, вы пытаетесь использовать то, что называется троичный оператор . Этот оператор ожидает следующий синтаксис:

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

В документации говорится, что вы можете опустить среднее предложение (предложение «что делать, если верно»), только если вы используете PHP 5.3 или новее. На мой взгляд, это плохая практика. Я не знаю ни о каких других языках программирования, которые бы допускали такой ярлык, и это только затрудняет чтение вашего кода (особенно, если вы читаете его через год или более после того, как написали его). Лучше всего писать код, который (где это возможно) обратно совместим; в результате он станет намного более портативным.

Обновление: Я немного прочитал о троичном операторе в Википедии, и некоторые другие языки имеют такие ярлыки (например, существует расширение GNU для C). Я все еще думаю, что использование ярлыка плохо; случай, когда оценка заявления приводит к побочным эффектам, приходит на ум.

...