有關PHP header的問題意見!?

edited 十月 2013 in 進階PHP討論
問題大致是這樣的...
某PHP網頁如下:
======
some html
<?php
if (xxx) {
header("Location: url");
exit;
}
?>
some html
======
主要是該頁可能在同一個地方需要判斷有什麼值就要有什麼值
如果沒有就跳回指定網頁..
依照PHP運作流程, 伺服器會開始解析該頁內容,
一直解折到該內容時, 因為不符就會直接 header 回指定頁面,
在使用端則不會有任何感覺直接被跳轉, 問題來了
這樣的話, 表示每次有人跑這頁, 如果不合法,
伺服器勢必均都將先解析前端無關緊要的HTML結果,
遇到判斷式再跳轉, 這樣的作法是否會造成伺服器負擔呢??

我是有想過..如果把前面固定的html做成include檔來處理
但有些困難, 因為其它部份也有另外的判斷式
而且如果弄成include..如果該判斷式有六層判斷(switch)
那不就一堆include(xxx);
似乎也不是PHP較好的作法..大家的意見呢
主要想知道..上面那種作法對伺服器的負擔會很大嗎??


原始討論: http://twpug.net/x/modules/newbb/viewtopic.php?topic_id=4333

評論

  • edited 八月 2009
    1. 原則上 header() 之前不該有任何輸出,雖然可以透過 output buffer 擋住,但那不是個好習慣
    2. 你所提到的伺服器端負擔其實微乎其微,可以自行透過一些效能測試方式印證,一個簡單的錯誤就比你所擔心的要嚴重些。
  • edited 八月 2009
    主要是該頁可能在同一個地方需要判斷有什麼值就要有什麼值
    如果沒有就跳回指定網頁..
    依照PHP運作流程, 伺服器會開始解析該頁內容,
    一直解折到該內容時, 因為不符就會直接 header 回指定頁面,
    看來,有點誤解囉
    1.php解釋器吃進*.php檔,會把非<?php ?>內的東西當作echo(字串輸出)處理
    2.header()前最好不要有輸出
    3.基於1,2點,如果判斷沒過就轉跳,那麼這些判斷式應該在一個程式的最頂端
  • edited 八月 2009
    所以最後我也是把基本判斷忠實的在頁首作了...
    也把那串HTML改用判斷完再引入include
    這樣就解決了...我那時大概是寫到頭暈了..
    這麼簡單的方式都沒想到...
    快要完全0錯誤0Cache的網站函件了...^^
  • edited 八月 2009
    我以前都是程式頁完全沒HTML..
    用到再引入相關的HTML(傳值回傳不同結果)
    或是用fopen直接取純HTML頁面的東西..
    會問這個問題是因為我接手了一個上述方式在跑的網站
    不改又怕影響到效能..改了又會改很多..(幾乎每個判斷頁)
    甚至有些直接在頁面中 echo Javascrip的 location.href 來做跳轉..
    讓我一整個很頭痛...
    尤其用javascipt的方式..每次都會多跳一頁....一整個無言
  • edited 八月 2009
    承上述..所以最後決定把他整個重寫了...>"<
Sign In or Register to comment.