我正在使用某人留下的遗留代码,而重新部署代码恰好是我的任务。我正在使用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)中部署了代码,并且没有麻烦。
请任何人,任何启示都足够了。
答案 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.