PHP 标签
魔方加密仅支持 PHP 文件,并将所有上传提交的文件都视为 PHP 文件,这意味着,所有被 PHP 标签包围的代码之外的其它内容都会直接输出。
PHP 标签包含开始标签和结束标签。开始标签和结束标签并不需要一一配对。魔方加密建议纯 PHP 文件(未嵌入任何 HTML 代码的文件)在结尾处不要使用结束标签,避免产生多余的空白和换行。
开始标签
开始标签一共有 3 种。
<?php
<?php
是完整的、最常用的开始标签。标签后必须跟随至少一个字节的空白,即空格、制表符、回车或换行符,否则将会被识别为 <?
标签而导致语法错误。
例如代码 <?php$a=1;?>
会被魔方加密的词法分析器分割为 (开始标签)
php
$a
=
1
;
;
(结束标签)
八个部分,其中第 2 个单词 php
被视为标识符,没有任何对应的语法规则,匹配失败,出现语法错误。
<?
<?
是 <?php
的缩写。标签后不要求任何空白字节。
<?=
<?=
是 <?php echo
的缩写,在编写输出代码时使用该标签可以减少代码量。标签后不要求任何空白字节。
结束标签
结束标签只有一种,即 ?>
。
请注意,?>
会自动在其前方自动插入一个 ;
,例如代码 <?=$a?>
会被魔方加密的词法分析器分割为 (开始标签)
echo
$a
;
(结束标签)
几部分。这一特性会对类似下列的代码产生影响,使其运行结果与预期不符:
<?php
if(0)
?>
Foo
<?php
echo 'Bar';
在这段代码中,由于 ?>
会自动在其前方插入 ;
,致使 if(0)
变为 if(0) ;
,对后方的 HTML 代码没有起到短路作用,输出的是:
Foo
Bar
结束标签会自动吞噬其后跟随的第一个回车或换行(如果有的话),如下列的代码:
<?php echo 'a'; ?>
<?php echo 'b'; ?>
其实际输出为:
ab
两个字符中没有任何换行符。又如下列的代码:
<?php echo 'a'; ?>
<?php echo 'b'; ?>
其实际输出为:
a
b
两个字符中有且仅有一个换行符,因为源代码中的第一个换行符已被 ?>
吞噬。