看板 PHP 關於我們 聯絡資訊
: 推 HuangJC :簡單說,header 是產生一些資料給 Client 看,並沒有 07/26 02:46 : → HuangJC :Server 自己想跳往哪個網頁這種 JUMP 指令;如果有 07/26 02:47 : → HuangJC :JUMP,那也不必 exit 了;header 給 Client 看,exit 給 07/26 02:47 : → HuangJC :Server 看;而 Client 看了特定 header 是會想JUMP.. 07/26 02:48 : → HuangJC :廣義的說,setcookie 也動手腳在 header;而 header 名 07/26 02:48 : → HuangJC :為 header,所以在其上就不能先有其他資料 07/26 02:49 : 推 bigair :可參照這篇 http://0rz.tw/ec4uz 良好的習慣是重要的 07/26 02:51 : 推 HuangJC :那個網址正好在爭論題目 XD 07/26 08:13 該網址題目的爭論,到最後還是沒改好? 其實主要問題是 php 是動態產生網頁的工具 而網頁是一串文字 事實上它在此是擔任文字處理 也就是說,根本不存在叫 server redirect 的指令 它的實際流程是: 1。php 產生文字,該文字內含 redirect 要求,存放在網頁 header 內 2。Client 端瀏覽器,比如 ie,收到 redirect 要求,便會去要求查看新的網頁 3。Client 端向 Server,比如 Apache,要求新網頁 因此,redirect 指令並不是向 server 直接發出 而是繞一圈由 client 發出的 我們如果以 multithread 的觀點來說,向 client 發出的要求送達 並不代表 server 端的程式必需同時被截止;server 端是處理完一頁 php 為止 而 client 端如果支援些什麼轉向,攔截,就可以把這個 redirect 毀掉了 (比如,我認為這是個病毒網址,我裝的掃毒程式提出攔截呢?) 而這樣的問題其實未來可能創出一個 redirect 函式,內含 exit 就解掉了 programmer 大可真的以為有要求 server 端直接轉址的 php 指令存在 直到哪天發生靈異現象再來考古 比如前面我說的,setcookie 現在是獨立指令 但它內部是靠修改 header 完成 所以在舊版 php 中沒有 setcookie,但在 phpbb 中我見到的範例是 header('cookie:xxxxxxx'); //詳細格式我忘了,總之 cookie 也是用 header 做的 一面網頁的格式可能是這樣 <header> <body> body 就是我們常看到的 html 內文,而 header 就包了一堆 get/post method 在傳遞變數;它非得在前面不可 要說 php 特別支援網頁?這裏或許是個證據 我不用懂這些考古的格式,我只要說麻煩幫我擺 cookie 就好了 如果我真的有興趣用 C 來寫動態網頁 那我就必需把整份文件,header 連同 body 全部自己產生 但目前我們看 php 程式 <?php xxxxx ?> 這樣的格式裏,並沒有 header 在最前面 而是有 header 在內文,有指令可用;但又限制這指令必需在一頁的文字中最早出現 所謂 header 在最前面,而且有規定格式在做 get/post method,這好像就是 cgi 了。。 如果 php 再進步下去,難保以後不會放寬 header 出現時機 因為 php 是 compile 完一頁再執行 它大可設計成只要發現 header,就把該行擺到最前面去 與其 warning programmer 你這行不是擺最前面,不如就硬幫你擺了 :p 代價大概是一頁產出必需先擺 buffer,全產出完再送往 client 吧。。 程式語言幫我們做愈多,我們需要知道細節就愈少 但碰到靈異現象時也更難應變了 回頭看到該網址,這當然不是 header 放在函式與否的問題 不放函式一樣有問題 直接說是探討 header 機制就好了 所以如果我一邊叫用 setcookie 指令 一邊又因為自己的了解用 header 去形成 setcookie 互摃會怎樣? 那當然可以打亂自己的程式 另外,前面有人提及如何送變數至另一個網頁 解答之一是用 form,再用 java 自己按下去 那其實放在 header 應該也辦得到? get/post 一個是把資料放在網址中,有安全性(易偽造)的問題 一個是放在 header 中,我前文應該是有寫錯了 只是現在急著出門。。 (閃)有正妹在等我 :P -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.219.65.16