回 ACSite.NET 首頁
回 ACSite.NET 首頁 客服系統 帳務系統 英文首頁
nav_seperator
nav_seperator
nav_seperator
nav_seperator
 

頁: [1]
  列印  
作者 主題: UTF8編碼的PHP程式出現headers already sent錯誤  (閱讀 17321 次)
some
客戶
*
離線 離線

文章: 10


« 於: 十二月 18, 2004, 07:30:15 pm »

acsite兄:

小弟想知道 php.ini 裡這三個設定

magic_quotes_gpc =
magic_quotes_runtime =
magic_quotes_sybase =

的值, 因為小弟寫的程式在自己的主機和公司的主機都正常值行
但在cp6 上確會出現莫名奇妙的訊息

Warning: Cannot modify header information - headers already sent

小弟在除錯.. 所以在找為什麼在本機和公司都ok但上傳後會有這種問題..
« 最後編輯時間: 十二月 19, 2004, 01:30:12 pm 由 acsite » 已記錄
acsite
管理員
Hero Member
*****
離線 離線

文章: 4,027


個人網站
« 回覆文章 #1 於: 十二月 18, 2004, 07:47:55 pm »

magic_quotes_gpc On
magic_quotes_runtime Off
magic_quotes_sybase Off
若需要其他設定值的話
可以使用 phpinfo() 查看

關於您所提之錯誤訊息
是因為程式沒有遵守header函數的使用必須在資料輸出之前的規定
以下引用自 http://tw2.php.net/manual/en/function.header.php
引用
Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include(), or require(), functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file.
這個錯誤可以經由設定暫存輸出來避免
但我們主機使用標準設定
所以必須請您遵守header函數的使用規定
該訊息後面的括號應該已經包含重要的除錯線索
例如 output started at xxx.php:2
表示您應該檢查 xxx.php 的第二行
看看是否有空格或是其他輸出
將其修正後便不會再出現這個訊息了 微笑
« 最後編輯時間: 十二月 18, 2004, 07:48:32 pm 由 acsite » 已記錄
some
客戶
*
離線 離線

文章: 10


« 回覆文章 #2 於: 十二月 18, 2004, 07:54:11 pm »

acsite兄..

我當然知道 header() 的使用..

我出現的錯誤訊息在程式的第一行..
在檔案結果也是 ?> 沒有多餘空白..檢查和找資料找小時了
令我百思不解

所以才朝設定下手..

我的主機和公司的這三個值都是  off
我會再試試調自己的來測看看是不是這個原因
和找出應對的寫法. 畢竟我知道這和系統是沒關係的
程式寫法上都可以解決.

謝謝您的資料提供
« 最後編輯時間: 十二月 18, 2004, 07:55:29 pm 由 some » 已記錄
acsite
管理員
Hero Member
*****
離線 離線

文章: 4,027


個人網站
« 回覆文章 #3 於: 十二月 18, 2004, 08:03:13 pm »

若您願意在此或是使用PM提供完整的網址或錯誤訊息
我可以幫您從主機直接開啟該檔案來看看是不是有什麼特殊字元 微笑  
已記錄
acsite
管理員
Hero Member
*****
離線 離線

文章: 4,027


個人網站
« 回覆文章 #4 於: 十二月 18, 2004, 08:05:59 pm »

另外您可以在php.ini試著取消使用 output_buffering
應該就會看到同樣的錯誤輸出了
已記錄
some
客戶
*
離線 離線

文章: 10


« 回覆文章 #5 於: 十二月 19, 2004, 12:27:56 am »

引用
另外您可以在php.ini試著取消使用 output_buffering
應該就會看到同樣的錯誤輸出了
謝謝 acsite兄..

取消 output_buffering 果然出現錯誤.


因為小弟的php這次都是用UTF-8 以往沒遇過這麼奇怪的事
錯誤出現在第一行.
後來正改回一般編碼語系果然正常..

做了一個測試檔

<?php
header("location: index.php");
?>

如果是utf-8就會出現一樣的錯誤.........

螫騰了五個小時終於找到問題點....
謝謝 acsite兄告訴我 取消 output_buffering 試試.....

不知道有什麼辦法讓 UTF-8的PHP檔正常..小弟再找資料吧!

感謝!
已記錄
acsite
管理員
Hero Member
*****
離線 離線

文章: 4,027


個人網站
« 回覆文章 #6 於: 十二月 19, 2004, 01:15:35 am »

由於沒有看到實例
所以可能無法對此提供有用的建議給您 微笑  
已記錄
some
客戶
*
離線 離線

文章: 10


« 回覆文章 #7 於: 十二月 19, 2004, 12:23:24 pm »

acsite兄

問題解決了,所以前來回報給您..
做為爾後同樣有使用者有這種問題時有所依據

問題出在小弟存成 utf8時有加入BOM簽名

加入BOM之後..其他的編輯器才知道以UFT8格式去開啟
但變成在每個檔頭多了 3bytes的識別碼,造成標準輸出..
所以 header() 才會出現已輸出於第一行的奇怪訊息.

如果不加入簽名, 在meta tag指定 utf-8 網頁一樣可以以utf-8去讀取, 一切正常
只是編輯器再開檔時不會認得這個檔案是 unf8 格式,

感謝您, 花了幾個小時不是沒收穫, 學到了經驗.
謝謝.
已記錄
acsite
管理員
Hero Member
*****
離線 離線

文章: 4,027


個人網站
« 回覆文章 #8 於: 十二月 19, 2004, 01:28:39 pm »

感謝some兄分享的經驗 :lol:
此篇將轉移至FAQ以供其他人參考 微笑  
已記錄
頁: [1]
  列印  
 
前往:  



 
 
bottom
Copyright © 2002 - 2017 ACSite.NET All Rights Reserved.