2009-12-01 209 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