posts - 48, comments - 13, trackbacks - 0, articles - 0
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          If you got this message: "Warning: Cannot modify header information - headers already sent by ...."
          如果在執(zhí)行php程序時(shí)看到這條警告:"Warning: Cannot modify header information - headers already sent by ...."

          Few notes based on the following user posts:
          有以下幾種解決方法:

          1. Blank lines (空白行):
          Make sure no blank line after <?php ... ?> of the calling php script.
          檢查有<?php ... ?> 后面沒有空白行,特別是include或者require的文件。不少問(wèn)題是這些空白行導(dǎo)致的。

           

           

          2. Use exit statement (用exit來(lái)解決):
          Use exit after header statement seems to help some people
          在header后加上exit();
          header ("Location: xxx");
          exit();

           

          3. PHP has this annoying problem, if your HTML goes before any PHP code or any header modification before redirecting to certain page, it'll said "Warning: Cannot modify header information - headers already sent by ...." Basically anytime you output to browser, the header is set and cannot be modified.   So two ways to get around the problem:

          3a. Use Javascript (用Javascript來(lái)解決):
          <? echo "<script> self.location(\"file.php\");</script>"; ?>
          Since it's a script, it won't modify the header until execution of Javascript.
          可以用Javascript來(lái)代替header。但是上面的這段代碼我沒有執(zhí)行成功... 另外需要注意,采用這種方法需要瀏覽器支持Javascript.

          3b. Use output buffering (用輸出緩存來(lái)解決):
          <?php ob_start(); ?>
          ... HTML codes ...
          <?php
          ... PHP codes ...
          header ("Location: ....");
          ob_end_flush();
          ?>
          This will save the output buffer on server and not output to browser yet, which means you can modify the header all you want until the ob_end_flush() statement.   This method is cleaner than the Javascript since Javascript method assumes the browser has Javascript turn on.   However, there are overhead to store output buffer on server before output, but with modern hardware I would imagine it won't be that big of deal.   Javascript solution would be better if you know for sure your user has Javascript turn on on their browser.

          就像上面的代碼那樣,這種方法在生成頁(yè)面的時(shí)候緩存,這樣就允許在輸出head之后再輸出header了。


          ————————————————————————————————————————————
          結(jié)果最后還是這個(gè)問(wèn)題:
          原來(lái)是php.ini里面的配置出了問(wèn)題,output_buffering參數(shù)默認(rèn)為off的,現(xiàn)在將它設(shè)為”on”就OK了。


          評(píng)論

          # re: Warning: Cannot modify header information - headers already sent by ...."[未登錄]  回復(fù)  更多評(píng)論   

          2014-02-11 10:02 by wang
          贊!

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 慈溪市| 新乐市| 五莲县| 汉寿县| 河曲县| 泗阳县| 庄浪县| 吉木萨尔县| 中宁县| 涞源县| 锡林郭勒盟| 阜南县| 房产| 巴林右旗| 大名县| 新竹县| 垫江县| 长兴县| 镇沅| 婺源县| 红桥区| 宜城市| 麻江县| 长兴县| 武冈市| 建德市| 开江县| 教育| 辽阳县| 长岛县| 平南县| 德格县| 灵台县| 新和县| 彩票| 武功县| 富宁县| 慈利县| 樟树市| 财经| 合山市|