【问题标题】:How to enable PHP short tags?如何启用 PHP 短标签?
【发布时间】:2011-01-12 05:19:00
【问题描述】:

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

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

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

谢谢

【问题讨论】:

标签: php tags php-shorttags


【解决方案1】:

设置

short_open_tag=On

php.ini

然后重新启动您的 Apache 服务器。

【讨论】:

  • 如果 PHP 作为 Apache 模块运行,也可以在 .htaccess 文件中设置:php_flag short_open_tag on
  • /etc/php5/apache2/php.ini 中最有趣的
  • @pinouchon,seedeg 写道他搬到了 Windows,但你的评论对我有帮助:)
  • 使用php --ini定位加载的配置文件(加载的配置文件:/etc/php5/cli/php.ini)
  • 如果您在 windows 中使用 xampp,请打开 XAMPP 控制面板,点击 CONFIG 按钮并转到 PHP (php.ini) 选项。
【解决方案2】:

这可以通过在 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

【讨论】:

  • 短开标签不一定是不好的做法(我在这里试图保持开放的心态),而仅仅是因为 Rasmus 等人。决定在 PHP5.4 中为它们提供默认支持并没有提供使用它们的理由。使用它们可能会创建以后不希望出现的依赖关系,或者导致与 XML 混淆。这里有一些很好的讨论:stackoverflow.com/questions/200640/…
  • 伊恩。我们不是在谈论<? echo $var ?> 短开标签,而是<?= $var ?> 短开标签。 Afaik XML 不应该受到影响。
  • 我们进行了 PHP 编码测试,偶尔会收到使用了 = 短标签的提交。不幸的是,认为这种风格无处不在的假设有点幼稚,并且通常来自于使用 ASP 长大的开发人员。显然它是可用的,但它的使用是一个微优化,并且会因为可移植性而失败,这是一种耻辱。
  • @IanLewis 我不同意。 PHP 短标签与 ASP 无关。您想要使用<?= 的最佳理由是用于模板,我认为这是一个相当有效的方法。其他模板语言如 mustache 也使用简短的简单标签 {{var}}。 PHP 经常被用作模板语言,而必须做<?php echo $var ?> 比内联 HTML 中的<?=$var?> 丑得多。
  • 这是一场有趣的辩论并且变得非常主观,我不认为漂亮的代码一定比显示出一些内在丑陋的代码更好。我自己的观点是 =$var?> 版本看起来比更开放但更长的版本更拥挤且可读性更低。与 ASP 的链接必须是一种普遍的看法,因为我认识的几个开发人员都在没有提示的情况下创建了相同的链接。
【解决方案3】:

这可以通过在 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

谢谢

【讨论】:

    【解决方案4】:

    设置短标签以在 Ubuntu 上从 Vagrant 安装脚本打开:

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

    【讨论】:

      【解决方案5】:

      我可以看到以上所有答案仅部分正确。 实际上,所有 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
      

      【讨论】:

      • 在我的情况下:sudo service php7.0-fpm restart
      • sudo service php-fpm restart 将适用于您在盒子上安装的任何默认 PHP 版本,除非您有多个版本,在这种情况下您必须指定您所指的版本
      • 仅重新启动 nginx 并没有为我解决问题。事实上,phpini() 函数继续将 short_open_tag 显示为 Off。我刚刚重新启动服务器,它工作。有点激烈,但仍然比研究原因要快...
      【解决方案6】:

      您需要开启 short_open_tags。

      short_open_tag = On
      

      【讨论】:

        【解决方案7】:

        就这么简单,按照以下步骤操作:

        1. 转到php.ini文件
        2. 找到short_open_tag并将其设置为on

          short_open_tag = On
          
        3. 重启服务器

        【讨论】:

          【解决方案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 安装。
          • 那是因为您没有将php.ini 包含到php-fpm.conf 中。
          • @miken32 ,无法将 php.ini 包含到 php-fpm.conf 中。你的评论可能会让读者感到困惑。答案是八年前写的,我想你不应该评论它,答案可能已经过时了。
          • 说“你不能在 /etc/php.ini 中为 php-fpm 设置 short_open_tag”是错误的,8 年前就错了。这是在您的输出中:“无法在第 159 行从 /etc/php-fpm.conf 包含 /etc/php.ini”,这意味着您试图将 php.ini 包含到 php-fpm.conf 中。
          • @miken32 ,你说得对,不是这样的,我忘了八年前这里有什么。
          【解决方案9】:

          如果您使用UbuntuApache+php5,那么在当前版本中有两个地方需要更改为short_open_tag = On

          1. /etc/php5/apache2/php.ini - 这是通过您的网络服务器 (Apache) 加载的页面
          2. /etc/php5/cli/php.ini - 从命令行启动 php 文件时使用此配置,例如:php yourscript.php - 用于手动或 cronjob 直接在服务器上执行的 php 文件。

          【讨论】:

            【解决方案10】:

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

            【讨论】:

              【解决方案11】:

              对于 Wamp Server 用户,有更简单的方法: 您可以启用该设置,只需(左)单击一次 WampServer 图标,选择 PHP -> PHP 设置 -> 短打开标记。稍等片刻,WampServer 会自动重启你的 PHP 和它的 web 服务。

              原文来自:http://osticket.com/forums/showthread.php?t=3149

              【讨论】:

                【解决方案12】:
                ; 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
                

                【讨论】:

                  【解决方案13】:

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

                  【讨论】:

                    【解决方案14】:

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

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

                    使用 ctrl+f 实用程序查找 short_open_tag

                    你会发现;short_open_tag

                    请从行中删除分号 (;)

                    并将其保留为short_open_tag = on

                    最后,重启你的 Apache 服务器

                    【讨论】:

                      【解决方案15】:
                      sed -i "s/short_open_tag = .*/short_open_tag = On/" /etc/php/7.2/apache2/php.ini
                      

                      这适用于 ubuntu 16 上的 php7.2,与 Bradley Flood 的上述答案相同,尽管存储配置文件的目录已更改。

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

                      【讨论】:

                        【解决方案16】:

                        您可以按照以下步骤操作:

                        1-> 转到/etc/php/7.3/apache2PHP version 内的php.ini 文件,然后

                        2-> 找到short_open_tag 并将其设置为On 并从开始删除;

                        short_open_tag = On
                        

                        3->重启服务器

                        sudo service apache2 restart
                        

                        【讨论】:

                          【解决方案17】:

                          对于 docker,将此步骤添加到 Dockerfile

                            ARG phpIniPath=/path/to/your/php.ini
                          
                            RUN sed -i -e 's/^short_open_tag\s*=.*/short_open_tag = On/' $phpIniPath  
                          

                          【讨论】:

                            【解决方案18】:

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

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

                            其中 xxxxx 是域的套接字号。

                            并添加:php_value[short_open_tag] = On

                            【讨论】:

                              【解决方案19】:
                               short_open_tag = On
                              

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

                              【讨论】:

                                【解决方案20】:

                                我已将我的 aws centos 7 实例和 php7(PHP 7.0.33 (cli) (built: Dec 6 2018 22:30:44) (NTS)) 上的 short_open_tag Off 更改为 On,但它没有反映php 信息页面和代码。因此,我参考了可能的文档并为我的案例找到了解决方案。在 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
                                

                                【讨论】:

                                  【解决方案21】:

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

                                  【讨论】:

                                  • asp 很可能是一个错字。为什么社区不能对@kal 稍微仁慈一点?
                                  猜你喜欢
                                  • 2013-10-07
                                  • 2013-09-28
                                  • 2013-01-29
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 2020-04-28
                                  • 2015-09-21
                                  • 2013-03-29
                                  • 2012-12-20
                                  相关资源
                                  最近更新 更多