2012-01-09 14 views
0

私は初心者のPHPで、私は誰かが私に助けてくれると願っていました。返信によってPHPサーバーエラーが発生しましたか? "http"

次の内容の.phpをサーバーにアップロードしてクロームブラウザに読み込むと、問題はないようです。

<?php 

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

}

Iが(違いは存在ですか?:「HTTP」)以下非常によく似たコードを含む.PHPファイルをアップロードするときしかし、クロムは、コードの下に貼り付け(サーバーエラーを返し)

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

エラー: ウェブサイトは、エラーが発生しました

サーバーエラー「URLは」それはメンテナンスのためにダウンしたり設定することができ取得中dが間違っています。

+3

これは無効な構文です。それはどういうことだと思いますか? – SLaks

+0

あなたは正確に何をしようとしていますか?つまり、あなたが探している出力は何ですか? – Adi

+1

これはPHP 5.2以前の解析エラーです。 '?:'ショートカットは、5.3以降でのみ動作します。 – mario

答えて

1

あなたは、だから、これは($_SERVER['HTTP_X_FORWARDED_PROTO']がある場合は、他httpを使用し、それが使用することを意味します

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

にそれを変更する必要があります。

+0

これはエラーを投げません。この機能がまだ実行されていることを確認したら、それを意図したタスクとして正しいものとしてマークします。助けてくれてありがとう。 –

0

あなたはternary operatorという名前のものを使用しようとしていると思います。あなたは、PHP 5.3以降を使用している場合にのみ、真ん中節(「どのような真の場合行うには」節)を省略することが

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

ドキュメントの状態:この演算子は、次の構文を期待しています。私の意見では、これは悪い習慣です。私は、そのショートカットを可能にする他のプログラミング言語は認識していません。そして、あなたのコードをもっと難しくするだけです(特に、あなたがそれを書いてから1年以上それを読んでいる場合)。可能であれば、下位互換性のあるコードを書くのが最善です。その結果、よりポータブルなものになります。

アップデート:私は、ウィキペディアのternary operatorについて少し読んで、いくつかの他の言語では、このようなショートカット(C用のGNU拡張機能には、例えば、存在する)を持っています。私はまだショートカットの使用が悪いと思う。ステートメント評価の結果が副作用の原因となるケース。

+0

'私はそのショートカットを許可する他のプログラミング言語は認識していません - 実際はJavascriptはしますが、構文は' || 'OR演算子を使うので違うので、まったく同じではないと思います。例えば。 'var someVar = someOtherVar || 6; 'someVar'には' someOtherVar'の値がtrueに評価され、 '6'には評価されません。 – DaveRandom

+0

@DaveRandom論理ORは、3値比較とは非常に異なる演算子です。 JavaScriptは三項演算子をサポートしていますが、両方の条件節が必要です(元のポスターの質問に記載されているショートカットは使用できません)。 –

関連する問題