2009-12-01 245 views
7

有沒有什麼辦法讓php停止處理一個文件,並讓它只處理它已經解析過的部分。我的意思是這樣的:停止php處理文件

<some data here> 
<?php phpinfo(); [IS THERE ANY THING I CAN PUT HERE] ?> 
<more data> 
[IS THERE ANY THING I CAN PUT HERE] 
<?HOW CAN I MAKE PHP NOT PARSE THIS?> 

是否有無論如何使第一個php部分後php忽略數據?

+1

好吧我會咬...我很好奇,你爲什麼想要?你想要做什麼? – cletus 2009-12-01 02:29:26

+0

你想輸出文件的其餘部分作爲原始文本? – SLaks 2009-12-01 02:30:17

回答

2

您可以使用exit關鍵字告訴PHP完成文件處理。

+0

這會確保它甚至不會解析文件的其餘部分嗎? – SLaks 2009-12-01 02:28:25

+0

正確........ – 2009-12-01 02:38:23

+0

是的......''exit'關鍵字明確告訴PHP停止解析,刷新它已有的輸出,並將控制返回到調用它的地方。 – Amber 2009-12-01 02:38:44

10

另一種解決辦法可能是使用__halt_compiler

暫停編譯器的執行。 這對於將數據嵌入到 PHP腳本中很有用,例如安裝 文件。數據開始的

字節的位置可以通過是否存在 __halt_compiler()在 文件呈現其僅定義的 __COMPILER_HALT_OFFSET__恆定 可以 確定。

的典型用法是Phar archives,當你需要嵌入PHP和(可能是二進制)數據到一個單一的文件,和PHP代碼需要訪問這些數據。


而實際上是有區別的:驗證碼:

blah blah 
<?php phpinfo(); ?> 
glop glop 
<?php exit(); ?> 
<?HOW CAN I MAKE PHP NOT PARSE THIS?> 

獲取我Parse error: syntax error, unexpected T_STRING
(可能是因爲我已經啓用short_open_tag,我想)


這枚一個:

blah blah 
<?php phpinfo(); ?> 
glop glop 
<?php __halt_compiler(); ?> 
<?HOW CAN I MAKE PHP NOT PARSE THIS?> 

工作正常 - 這個無效的PHP代碼在撥打__halt_compiler()之後。

+0

不錯的提示!將文件的其餘部分發送到瀏覽器(不是在那裏裁剪/剪切)?如果是這樣,這可能會加速處理長頁面(開始時只有很少的PHP代碼)(__halt_compiler();作爲最後一行),或PHP包含的純HTML頁面(將<?php __halt_compiler();?>添加爲第一行) 。 – FrancescoMM 2012-11-30 11:44:46

4

我相信你所要做的只是編寫return 0;(或任何其他值),PHP將停止解析這個文件並返回給它調用的任何東西。當您需要在一個文件中停止執行,但不想完全使用die()exit()時,此功能非常有用。

+0

據我瞭解,它不會真的停止*解析*文件,但它會停止*當它到達'return'時執行* – 2015-03-13 13:29:39