停止 PHP 处理文件。

9
有没有办法让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
你想将文件的剩余部分输出为原始文本吗? - SLaks
3个回答

14

另一个解决方案可能是使用__halt_compiler

停止编译器的执行。 这可以用来将数据嵌入到 PHP 脚本中, 如安装文件等。

数据开始的字节位置可以由 __COMPILER_HALT_OFFSET__ 常量确定, 只有在文件中存在 __halt_compiler() 时才定义。

典型的用途是为了Phar 归档文件,当您需要将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() 后仍能正常工作。


不错的提示!文件的其余部分是否会发送到浏览器(而不是在那里裁剪/切割)?如果是这样,这可能会加快处理长页面的速度,其中仅有少量PHP代码位于开头(__halt_compiler();作为最后一行),或者由PHP包含的纯HTML页面(在第一行添加<?php __halt_compiler(); ?>)。 - FrancescoMM

5

我相信你只需要写return 0;(或任何其他值),PHP将停止解析此文件并返回给调用它的地方。当您需要在一个文件中停止执行但不想完全die()exit()时,这很有用。


2
据我所知,它并没有真正停止解析文件,但是当它到达return时停止执行 - Andrea Casaccia

3
你可以使用 exit 关键字告诉 PHP 停止处理文件。

这会确保它甚至不解析文件的其余部分吗? - SLaks
是的... exit 关键字明确告诉 PHP 停止解析,刷新它已经有的输出,并将控制权返回给调用它的代码。 - Amber
PHP即使找到了“exit”,也会继续编译,只有在完整文件的编译完成后才会执行。Pascal的回答是正确的。 - Wolfgang Stengel
7
这个回答是完全错误的。 exit()函数只停止执行,而不是解析 - Matteo Tassinari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接