如何启用PHP短标签?

361

我有一个运行在Linux服务器上的Web应用程序,它以<?开头。

我需要将这个应用程序复制到Windows环境中,一切正常,除了一个SQL语句的渲染方式不同。我不知道这是否与脚本以<?php而不是<?开头有关,因为我不知道从哪里启用<?,所以我把它改成了<?php

我知道这两个语句应该是相同的,但我需要测试使用<?来确保应用程序完全相同。这样我就可以排除另一个可能性。

谢谢


8
短标签(Short open tags)在 PHP 7.4 中已被弃用,并将在 8.0 版本中被移除。 - bishop
2
然而,这个故事仍在发展中。请继续关注。 :) - bishop
21个回答

619

设置

short_open_tag=On

php.ini 文件中进行修改

并重新启动 Apache 服务器。


59
如果PHP作为Apache模块运行,您也可以在.htaccess文件中进行设置:php_flag short_open_tag on。意思是,如果PHP是以Apache模块的方式运行,您可以通过在.htaccess文件中设置php_flag short_open_tag on来启用short_open_tag选项。 - Álvaro González
13
很可能在/etc/php5/apache2/php.ini文件中。 - Benjamin Crouzier
1
@pinouchon,seedeg写道他转到了Windows,但是您的评论帮了我 :) - Line
10
使用 php --ini 命令可以定位已加载的配置文件 (已加载的配置文件:/etc/php5/cli/php.ini)。 - Wietse
2
如果您在Windows上使用xampp,则请打开XAMPP控制面板,单击CONFIG按钮,然后转到PHP(php.ini)选项。 - Praful Rajput
显示剩余2条评论

90
这可以通过在 php.ini 中启用short_open_tag来实现:
short_open_tag = on

如果您无法访问php.ini文件,可以尝试通过.htaccess文件启用它们,但是如果您使用的是共享主机,可能会被托管公司禁用。
php_value short_open_tag 1

对于认为 short_open_tags 是不良实践的人们而言,从 PHP 5.4 开始,<?= ... ?> 短标签将被支持在任何地方,无论设置如何,因此如果您可以控制服务器上的设置,就没有理由不使用它们。也可以在此链接中看到:short_open_tag


5
短标签不一定是不良做法(我试图保持开放的态度),但仅仅因为Rasmus等人决定在PHP5.4中提供对其的默认支持,并不意味着使用它们是有正当理由的。使用短标签可能会导致以后出现不必要的依赖或与XML混淆。这里有一些很好的讨论:https://dev59.com/C3VC5IYBdhLWcg3wtzyt?rq=1 - Ian Lewis
1
Ian,我们正在讨论的不是<? echo $var ?>短标签,而是<?= $var ?>短标签。据我所知,XML不应受影响。 - RJD22
我们有一个 PHP 编码测试,偶尔会收到使用 <?= 短标签的提交。不幸的是,认为这种风格在任何地方都被使用是有点天真的,而且通常来自于 ASP 的开发人员。显然,它是可用的,但它的使用是一种微观优化,并且将因可移植性问题而失败,这是很遗憾的。 - Ian Lewis
8
@IanLewis 我不同意。PHP短标签与ASP无关。使用<?= 的最好原因是用于模板化,我认为这是相当合理的。其他模板语言(如mustache)也使用简短的标记{{var}}。PHP经常被用作模板语言,在内联HTML中必须写<?php echo $var ?><?=$var?>要难看得多。 - RJD22
这是一个有趣的辩论,也很主观化,我不相信漂亮的代码一定比表现出固有丑陋的代码更好。在这里,我的观点是<?=$var?>版本看起来更加拥挤和不易读,而更长但更开放的版本则更具可读性。与ASP的联系必须是一个共同的看法,因为我认识的几个开发人员都会不假思索地提到这个联系。 - Ian Lewis
显示剩余3条评论

26

可以通过在php.ini中启用short_open_tag来实现此目的:

1.要定位php.ini文件,在注释行上执行以下操作:

 php --ini

你将会得到类似这样的东西,

Configuration File (php.ini) Path: /etc
Loaded Configuration File:         /etc/php.ini
Scan for additional .ini files in: /etc/php.d
Additional .ini files parsed:      /etc/php.d/curl.ini,
/etc/php.d/fileinfo.ini,
/etc/php.d/gd.ini,
/etc/php.d/json.ini,
/etc/php.d/mcrypt.ini,
/etc/php.d/mysql.ini,
/etc/php.d/mysqli.ini,
/etc/php.d/pdo.ini,
/etc/php.d/pdo_mysql.ini,
/etc/php.d/pdo_sqlite.ini,
/etc/php.d/phar.ini,
/etc/php.d/sqlite3.ini,
/etc/php.d/zip.ini

查看评论输出的第二行,文件将在提到的路径中。

2.打开php.ini文件并找到short_open_tag。默认情况下它是关闭的,将其改为on

3.重启服务器,执行此命令。

service httpd restart

谢谢


18

为了从Ubuntu上的Vagrant安装脚本中设置短标签为开启:

sed -i "s/short_open_tag = .*/short_open_tag = On/" /etc/php5/apache2/php.ini

14

我看到上面所有的答案都只有部分正确。实际上,所有21世纪的PHP应用程序都将拥有FastCGI进程管理器(php-fpm),因此一旦您将php-info()添加到您的test.php脚本中并检查php.ini的正确路径后。

Go to php.ini and set short_open_tag = On

重要提示: 然后您必须重新启动您的php-fpm进程以使其生效!

sudo service php-fpm restart

然后最后重新启动您的nginx/http服务器

sudo service nginx restart

2
在我的情况下:sudo service php7.0-fpm restart - Dumindu Perera
sudo service php-fpm restart 可以适用于您在计算机上安装的任何默认版本的 PHP,除非您有多个版本,否则必须指定您要引用的版本。 - Eddy Ferreira
1
仅仅重启nginx对我来说并没有起作用。事实上,phpini()函数继续显示short_open_tag为Off。我只是重新启动了服务器,然后它就可以工作了。有点激烈,但比研究原因还要快... - Fran Marzoa

10

你需要开启short_open_tags。

short_open_tag = On

10
就这么简单,按照以下步骤操作:
  1. 进入 php.ini 文件
  2. 查找 short_open_tag 并将其设置为 on

short_open_tag = On
  • 重启服务器


  • 8
    在CentOS 6(在CentOS 7上也测试过)中,你不能在/etc/php.ini中为php-fpm设置short_open_tag。否则会报错:
    ERROR: [/etc/php.ini:159] unknown entry 'short_open_tag'
    ERROR: Unable to include /etc/php.ini from /etc/php-fpm.conf at line 159
    ERROR: failed to load configuration file '/etc/php-fpm.conf'
    ERROR: FPM initialization failed
    

    您需要编辑站点的配置文件,该文件位于 /etc/php-fpm.d/www.conf。并在文件末尾添加以下内容:

    php_value[short_open_tag] =  On
    

    必须在Debian Jessie上执行此操作。实际上,这可能适用于所有PHP5-FPM安装。 - Bertrand
    这是因为您没有将 php.ini 包含到 php-fpm.conf 中。 - miken32
    @miken32 ,无法将 php.ini 包含到 php-fpm.conf 中。 你的评论可能会让读者感到困惑。 这个回答是八年前写的,我认为你不应该对它发表评论,因为答案可能已经过时了。 - xakru
    说“你不能在/etc/php.ini中为php-fpm设置short_open_tag”是错误的,而且8年前就错了。这是你的输出:“无法从/etc/php-fpm.conf的第159行包含/etc/php.ini”,这意味着你试图将php.ini包含到php-fpm.conf中。 - miken32
    @miken32,你说得对,不是那个问题,我忘记了八年前这里是什么了。 - xakru

    7
    如果你正在使用带有Apache+php5的Ubuntu,那么在当前版本中有两个地方需要更改为short_open_tag = On:
    1. /etc/php5/apache2/php.ini - 这是通过你的Web服务器(Apache)加载的页面。 2. /etc/php5/cli/php.ini - 当你从命令行启动php文件时使用此配置,例如:php yourscript.php。对于手动或在服务器上直接执行的cronjob php文件也适用。

    6

    如果您编辑了php.ini文件,请记得重新启动服务(apache2等),以使php.ini的编辑生效。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接