PHP 标签

魔方加密仅支持 PHP 文件,并将所有上传提交的文件都视为 PHP 文件,这意味着,所有被 PHP 标签包围的代码之外的其它内容都会直接输出。

PHP 标签包含开始标签和结束标签。开始标签和结束标签并不需要一一配对。魔方加密建议纯 PHP 文件(未嵌入任何 HTML 代码的文件)在结尾处不要使用结束标签,避免产生多余的空白和换行。

开始标签

开始标签一共有 3 种。

<?php

<?php 是完整的、最常用的开始标签。标签后必须跟随至少一个字节的空白,即空格、制表符、回车或换行符,否则将会被识别为 <? 标签而导致语法错误。

例如代码 <?php$a=1;?> 会被魔方加密的词法分析器分割为 (开始标签) php $a = 1 ; ; (结束标签) 八个部分,其中第 2 个单词 php 被视为标识符,没有任何对应的语法规则,匹配失败,出现语法错误。

<?

<?<?php 的缩写。标签后不要求任何空白字节。

<?=

<?=<?php echo 的缩写,在编写输出代码时使用该标签可以减少代码量。标签后不要求任何空白字节。

结束标签

结束标签只有一种,即 ?>

请注意,?> 会自动在其前方自动插入一个 ;,例如代码 <?=$a?> 会被魔方加密的词法分析器分割为 (开始标签) echo $a ; (结束标签) 几部分。这一特性会对类似下列的代码产生影响,使其运行结果与预期不符:

  1. <?php
  2. if(0)
  3. ?>
  4. Foo
  5. <?php
  6. echo 'Bar';

在这段代码中,由于 ?> 会自动在其前方插入 ;,致使 if(0) 变为 if(0) ;,对后方的 HTML 代码没有起到短路作用,输出的是:

  1. Foo
  2. Bar

结束标签会自动吞噬其后跟随的第一个回车或换行(如果有的话),如下列的代码:

  1. <?php echo 'a'; ?>
  2. <?php echo 'b'; ?>

其实际输出为:

  1. ab

两个字符中没有任何换行符。又如下列的代码:

  1. <?php echo 'a'; ?>
  2. <?php echo 'b'; ?>

其实际输出为:

  1. a
  2. b

两个字符中有且仅有一个换行符,因为源代码中的第一个换行符已被 ?> 吞噬。

原文: http://mfenc-manual.mydoc.io/?t=41150