簡體   English   中英

使用$ _SERVER ['HTTP_HOST']切換始終默認為第一個

[英]switch using $_SERVER['HTTP_HOST'] always defaults to first

我有以下代碼:

<?php
echo $_SERVER['HTTP_HOST'];
// CONFIGURATION ITEMS
$captcha_private_key = '';
$captcha_public_key = '';
switch ($_SERVER['HTTP_HOST']) {
    case 'earth-neighbours.com' || 'www.earth-neighbours.com':
        $captcha_private_key = '6Lcb_t4SAAAAALkdH4njSny2HYbrmGKS_G84kM_d';
        $captcha_public_key = '6Lcb_t4SAAAAAPEtqJEcWXuo0zmRD5PxYkXx84R4';
        echo 'live';
        break;
    case 'earth-neighbours.projects.mi24.net':
        $captcha_private_key = '6Lca_t4SAAAAAJb5L4sA7fEHxDFA0Jl8jFw-h3hE';
        $captcha_public_key = '6Lca_t4SAAAAAFd-Q2k8esFa9U8nQ2rirEZHFtAH';
        break;
    case 'earth-neighbours.local':
        $captcha_private_key = '6LcZ_t4SAAAAAGc1_S9ahxo-Vg-e7QgHg4yAWBVU';
        $captcha_public_key = '6LcZ_t4SAAAAAPHQDb_f-g4mS6mpmc0heustHQ60&hl';
        echo 'local';
        break;
}
?>

它在本地服務器上運行(earth-neighbours.local),因此應輸出'local'。 相反,它輸出“實時”。 然而,頂部的回聲(echo $ _SERVER ['HTTP_HOST'];)返回url earth-neighbours.local,因此它應該是回顯的'local'。 這讓我很難過。 我以前工作過,現在我把它轉移到了頁面的頂部,它不起作用。 奇怪的! 任何人?

PHP不像其他編程語言那樣執行switch case或語句。

當您寫下以下內容時:

 switch ($test) {
   case 1 || 2:
    $blah();
    break;
 }

這是實際發生的事情:

 switch ($test) {
   if (true == $test) {
   }
 }

發生這種情況的原因是因為案例內容實際上得到了評估,而在PHP中, 1 || 2 === true 1 || 2 === true PHP然后在$ test上對布爾值進行類型轉換,而$ test除非為空,否則為真。

PHP“正確”語法是:

switch ($test) {
  case 1:
  case 2:
    $blah();
    break;

在PHP(實際上還有其他幾種語言)中,一旦解釋器進入switch ,它的唯一出現方式就是break 在案件結束時沒有破壞告訴它繼續。

采用:

case 'earth-neighbours.com':
case 'www.earth-neighbours.com':

代替:

case 'earth-neighbours.com' || 'www.earth-neighbours.com':

因為這是switch語句的錯誤語法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM