如何启用PHP短标签?


324

我在Linux服务器上有一个以以下内容开头的Web应用程序 <?

我需要将此应用程序复制到Windows环境,并且一切工作正常,除了SQL语句的呈现方式有所不同。我不知道这是否与脚本开头有关,<?php而不是<?因为我不知道从何处启用<?from,PHP.ini所以我将其更改为<?php

我知道这两个语句应该具有相同的含义,但是我需要对其进行测试,<?以确保应用程序完全相同。这样我可以消除另一种可能性。

谢谢



但是,这个故事还在发展。敬请关注。:)
主教

Answers:


559

short_open_tag=On

php.ini中

并重新启动您的Apache服务器。


54
如果PHP运行作为Apache模块,还可以将其设置在.htaccess文件:的php_flag short_open_tag的值为上
阿尔瓦罗·冈萨雷斯

12
最富魅力的人/etc/php5/apache2/php.ini
本杰明·克鲁兹耶

@pinouchon,seedeg写道,他移动到Windows,但您的评论可以帮助我:)
在线

7
使用php --ini定位加载配置文件(加载的配置文件:/etc/php5/cli/php.ini)
Wietse

如果您在Windows中使用xampp,请打开XAMPP控制面板,单击CONFIG按钮并转到PHP(php.ini)选项。
Praful Rajput

80

这可以通过在php.ini中启用short_open_tag来完成:

short_open_tag = on

如果您无权访问php.ini,则可以尝试通过.htaccess文件启用它们,但是如果您在共享主机上,则托管公司可能会禁用它:

php_value short_open_tag 1

对于那些认为short_open_tags 从php 5.4开始<?= ... ?>是不好的做法的人,无论设置如何,shorttag都将受到支持,因此,如果您可以控制服务器上的设置,则没有理由不使用它们。在此链接中还说:short_open_tag


5
短的开放标签不一定是坏习惯(我想在这里保持开放的态度),只是因为Rasmus等人。决定在PHP5.4中为它们提供默认支持没有提供使用它们的理由。使用它们可能会产生依赖关系,这在以后是不可取的,或者会导致与XML混淆。这里有一些不错的讨论:stackoverflow.com/questions/200640/…–
伊恩·刘易斯

1
伊恩 我们不是在谈论<? echo $var ?>短标签,而是<?= $var ?>短标签。Afaik XML不应该受到影响。
RJD22

我们有一个PHP编码测试,偶尔会收到使用<?=短标记的提交。不幸的是,这种样式到处都在使用的假设有些天真,并且通常来自开发人员对ASP的了解。显然,它是可用的,但是它的使用是微优化,并且由于可移植性的原因而失败,这是一个遗憾。
伊恩·刘易斯

6
@IanLewis我不同意。PHP短标记与ASP无关。您要使用<?= 模板的最佳原因是模板,我认为这是一个相当有效的模板。其他模板语言(例如mustache)也使用简短的简短标签{{var}}。PHP通常被用作模板语言,并且<?php echo $var ?><?=$var?>内联HTML 丑陋得多。
RJD22

这是一个有趣的辩论,并且变得非常主观,我认为漂亮的代码不一定比表现出某些固有丑陋的代码更好。我个人的看法是,与更开放但更长的版本相比,<?= $ var?>版本看起来更拥挤,可读性更差。与ASP的链接必须是一个常识,然后,我认识的几个开发人员都在没有提示的情况下进行了相同的链接。
伊恩·刘易斯

19

这可以通过在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。默认情况下,off将其更改为on

3.重新启动服务器,执行此注释

service httpd restart

谢谢


18

要在Ubuntu上的Vagrant安装脚本中设置要打开的简短标签,请执行以下操作:

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

12

我可以看到以上所有答案仅部分正确。实际上,所有21世纪PHP应用程序都将具有FastCGI Process Manager(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服务php7.0-fpm重新启动
Sampath Perera

sudo服务php-fpm restart将适用于您安装在盒子上的任何默认版本的PHP,除非您有多个版本,在这种情况下,您必须指定所指的版本
Eddy Ferreira

1
重新启动nginx对我没有帮助。实际上,phpini()函数继续显示short_open_tag为Off。我刚刚重新启动服务器,它正常工作。有点激烈,但仍比研究快...为什么
Fran Marzoa

10

您需要打开short_open_tags。

short_open_tag = On


9

在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安装。
伯特兰

7

如果Ubuntu与配合使用Apache+php5,则在当前版本上,有2个地方需要更改为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的编辑生效



5
; Default Value: On
; Development Value: Off
; Production Value: Off
; http://php.net/short-open-tag
;short_open_tag=Off   <--Comment this out
; XAMPP for Linux is currently old fashioned
short_open_tag = On   <--Uncomment this

1

如果使用xampp,您会注意到php.ini文件两次提到了short_open_tag。启用第二个到short_open_tag = On。第一个被注释掉了,您可能会想取消注释和编辑它,但是第二个short_open_tag覆盖了它


1

如果您在Windows中使用xampp,请执行以下操作

  1. 打开XAMPP控制面板。
  2. 单击配置按钮。
  3. 转到PHP(php.ini)选项。

使用ctrl + f实用工具查找short_open_tag

你会发现 ;short_open_tag

请删除分号(;)从行中。

并保持为 short_open_tag = on

最后,重新启动Apache服务器


0

要使用php-fpm为特定域启用short_open_tag,必须编辑:

/etc/php5/fpm/pool.d/xxxxxxxxxx.conf

其中xxxxx是域的套接字号。

并添加:php_value [short_open_tag] =开


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

可以在ubuntu 16上的php7.2上运行,尽管存储配置文件的目录已更改,但与Bradley Flood的答案相同。

您也可以更改php字符串中的版本以匹配您当前安装的版本。



-2

我在aws centos 7实例和php7(PHP 7.0.33(cli)(built:Dec 6 2018 22:30:44)(NTS))上将short_open_tag从Off更改为On,但未反映php信息页面和代码。因此,我可以参考may docs并找到针对我的案例的解决方案。在short_open_tag之后在asp_tags = On之后添加额外的一行=重新启动Apache之后,它可以在代码上工作,并且我可以正确地输出

php.ini文件

engine = On

; This directive determines whether or not PHP will recognize code between
; <? and ?> tags as PHP source which should be processed as such. It is
; generally recommended that <?php and ?> should be used and that this feature
; should be disabled, as enabling it may result in issues when generating XML
; documents, however this remains supported for backward compatibility reasons.
; Note that this directive does not control the <?= shorthand tag, which can be
; used regardless of this directive. 
; Default Value: On   
; Development Value: Off     
; Production Value: Off  
; http://php.net/short-open-tag

short_open_tag = On

; Allow ASP-style <% %> tags   
; http://php.net/asp-tags
asp_tags = On

-5

设置asp_tags = Onshort_open_tag = On在这两个文件\apache\Apache2.2.21\bin\php.ini\bin\php\php5.3.8\php.ini ,然后重新启动Apache服务器。


6
asp_tags?做什么的?
您的常识2012年

1
ASP很可能是错字。为什么社区不能对@kal一点怜悯呢?
n8bar
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.