一个*empty*PHP文件"<?php",当包含时,不会被解析并被添加到输出缓冲区,为什么呢?

jol*_*olt 0 php require include output-buffering

最简单的复制方法是通过Web上下文,通过执行以下操作:

  1. 创建一个file.php包含以下内容:<?php.没有空格!

  2. index.php使用以下内容:

    <?php
    
    header('Content-Type: text/plain');
    
    require 'file.php';
    
    echo 'test';
    
    Run Code Online (Sandbox Code Playgroud)

现在,见证结果.

预期: test

实际: <?phptest

在开发过程中我偶然发现了很多次,这很烦人.

环境:

  • Linux 3.13.7-1-ARCH#1 SMP PREEMPT Mon Mar 24 20:06:08 CET 2014 x86_64
  • Apache/2.4.9(Unix)(内置:2014年3月16日12:48:23)
  • PHP 5.5.10(cli)(内置:2014年3月5日17:41:10)

为什么这样的行为,怎么来PHP不解析这个?

Mar*_*ker 6

引用文档:

注意:

在PHP 5.2及更早版本中,解析器不允许<?php开始标记是文件中的唯一内容.如果在开始标记之后有一个或多个空白字符,则从 PHP 5.3开始允许这样做.

我的重点