2016-08-11 143 views
1

我是這個PHP Micro Framework的新手。<?PHP標記之前的空格在Slim中導致錯誤

在我陷入這些錯誤之前,我最近一直在關注它。

Displayed Errors

<br /> 
<b>Fatal error</b>: Uncaught exception 'RuntimeException' with message 'Unexpected data in output buffer. Maybe you have characters before an opening &lt;?php tag?' in C:\xampp\htdocs\slim3\codecourse\vendor\slim\slim\Slim\App.php:552 
Stack trace: 
#0 C:\xampp\htdocs\slim3\codecourse\vendor\slim\slim\Slim\App.php(344): Slim\App-&gt;finalize(Object(Slim\Http\Response)) 
#1 C:\xampp\htdocs\slim3\codecourse\vendor\slim\slim\Slim\App.php(298): Slim\App-&gt;process(Object(Slim\Http\Request), Object(Slim\Http\Response)) 
#2 C:\xampp\htdocs\slim3\codecourse\public\index.php(17): Slim\App-&gt;run() 
#3 {main} 
    thrown in <b>C:\xampp\htdocs\slim3\codecourse\vendor\slim\slim\Slim\App.php</b> on line <b>552</b><br /> 

我試圖尋找解決方案,以什麼可能是這些錯誤的原因,我發現,一旦存在<?php開始標記前面沒有空格這些錯誤都消失了,但如果在<?php開始標記之前留下空間,這些錯誤再次出現。

就PHP而言,可能是什麼原因呢?

我的項目的文件夾結構:

Folder Structure1

+0

如果在打開PHP標記之前有輸出,Slim會拋出一個異常,原因可能是*因爲在打開PHP標記(.phtml類型模板除外)之前,您從不需要輸出......它會將任何「 header()'你試圖設置。 – CD001

+0

這不是Slim中的錯誤。這是用戶問題。當包含php代碼的文件中出現空格時,php會發送瀏覽器標題,然後slim將不再使用,因爲它不再控制該流的任何方面。 – geggleto

+0

@ CD001 @ geggleto 我的代碼在<?php之前沒有空格,但是我得到錯誤.. 爲什麼? – Sudo255

回答

0

這裏是要記住兩兩件事:

  • PHP是一般(可以有例外情況,根據您的設置)輸出,因爲它被執行。所以只要有一個echoPHP標籤以外的東西,就直接發送到瀏覽器。

  • 由於HTTP的工作方式,標題必須在內容之前發送。一旦你發送了內容,你不能設置任何進一步的標題。

這兩個因素的相互作用意味着在第一個PHP標記之前打開空間會導致腳本無法發送任何HTTP標頭。顯然斯利姆試圖設置一些標題,但不能。我必須說,它給你的錯誤信息是合理的信息。

+0

,我的代碼在第一行用<?PHP開頭,這意味着PHP的開始標記之前沒有空格。 錯誤對我的觀察沒有意義 – Sudo255

+0

@AgApeAmAdeuskAmAgenge Unicode BOM,也許?嘗試採取hexdump。 – TRiG