标记<! - ?在PHP中行为不端 - >

时间:2009-08-14 02:18:10

标签: php

我正在使用某人留下的遗留代码,而重新部署代码恰好是我的任务。我正在使用Windows Server 2003,Apache 2.0.63和PHP 5.2.10。

它不起作用。至少,不是我预期的方式。如果你愿意的话,把它叫做bug。

在检查时,我怀疑这段代码(在申请书中多次出现)是罪魁祸首。

    &$this->

为了说明问题,我重现了这段代码:

    <?php
       phpinfo();
       //$variable = &$this->request;
    ?>

上面的代码执行得非常好,并且符合预期。但是,如果我将代码更改为:

    <?
       phpinfo();
       //$variable = &$this->request;
    ?>

代码行为异常,反而在屏幕上产生了这个结果,这当然是完全不必要和意外的。

    request; ?>

现在,代码中充斥着与上面类似的代码,因此,应用程序现在在屏幕上产生与此类似的输出:

    request; $user = &$this->user; // This is comment return false; ?>

代码为:

    <?
        $request = &$this->request;
        $user = &$this->user;
        // This is comment
        return false;
    ?>  

我曾试图改变每一个&lt;? with&lt;?php when&amp; $ this-&gt;看起来很难看,但大多数时候,它引入了一个新的错误。

我重新安装了PHP和Apache,即使使用另一个版本的PHP(5.2.6),它仍然无法正常工作。我在我的localhost(Mac OS X,PHP 5.2.8和Apache 2.0.63)中部署了代码,并且没有麻烦。

请任何人,任何启示都足够了。

3 个答案:

答案 0 :(得分:12)

在php.ini中,您需要设置以下指令:

short_open_tag = On

来自manual

  

判断是否为简短形式(<? ?>)   应该允许PHP的开放标记...

如果您有时间,可能需要考虑将所有短标签“<?”替换为完整格式<?php,以便更好地移植(看看刚刚发生在您身上的事情) ?:)

答案 1 :(得分:2)

我建议不要使用开放标记,因为它可能会干扰<?xml代码。 我之前也遇到过这个问题,只需将所有<?php替换为<?,然后再将所有<?替换为<?php

这样你就不会得到任何东西

<?  <-- one space after the '?'

<?php  <-- one space after the 'p'
希望这会有所帮助......

答案 2 :(得分:0)

如果您想使用短标签:  ("<?")

需要在php.ini中启用它们。见link.