Как включить короткие теги PHP?

У меня есть веб-приложение на сервере Linux, которое начинается с <?

Мне нужно было скопировать это приложение в среду Windows, и все работает нормально, за исключением того, что оператор SQL отображается по-другому. Я не знаю, связано ли это со сценарием, начинающимся с <?php вместо <?, потому что я не знаю, откуда включить <? из PHP.ini, поэтому я изменил его на <?php

Я знаю, что эти 2 утверждения должны означать одно и то же, но мне нужно проверить это с помощью <?, чтобы убедиться, что приложение точно такое же. Таким образом я могу исключить другую возможность.

Спасибо


person seedg    schedule 02.02.2010    source источник
comment
Однако история все еще разрабатывается. Будьте на связи. :)   -  person bishop    schedule 25.04.2019


Ответы (20)


Установленный

short_open_tag=On

в php.ini

И перезапустите сервер Apache.

person codaddict    schedule 02.02.2010
comment
Если PHP работает как модуль Apache, вы также можете установить его в файле .htaccess: php_flag short_open_tag на - person Álvaro González; 02.02.2010
comment
Самый ликий в /etc/php5/apache2/php.ini - person Benjamin Crouzier; 04.04.2013
comment
@pinouchon, seedeg написал, что переходит на Windows, но Ваш комментарий мне помогает :) - person Line; 25.04.2014
comment
Используйте php --ini, чтобы найти загруженный файл конфигурации (загруженный файл конфигурации: /etc/php5/cli/php.ini) - person Wietse; 18.09.2014
comment
Если вы используете xampp в Windows, откройте панель управления XAMPP, нажмите кнопку CONFIG и перейдите к опции PHP (php.ini). - person Praful Rajput; 21.11.2014
comment
Для пула php-fpm: php_glag[short_open_tag] = on - person Galvani; 23.09.2016
comment
Если вы используете nginx, вам также следует перезапустить службу php7.0-fpm, как описано здесь: stackoverflow.com/a/24551932/828193 . Команда sudo service php7.0-fpm restart. - person user000001; 02.08.2017

Это можно сделать, включив short_open_tag в php.ini:

short_open_tag = on

Если у вас нет доступа к php.ini, вы можете попробовать включить их с помощью файла .htaccess, но возможно, хостинговая компания отключила это, если вы используете общий хостинг:

php_value short_open_tag 1

Для людей, которые думают, что short_open_tags - плохая практика, начиная с php 5.4, <?= ... ?> shorttag будет поддерживаться везде, независимо от настроек, поэтому нет причин не использовать их, если вы можете управлять настройками на сервере. Также в этой ссылке сказано: short_open_tag

person RJD22    schedule 02.02.2010
comment
Короткие открытые теги не обязательно являются плохой практикой (я стараюсь сохранять непредвзятость здесь), но только потому, что Rasmus et al. решил предоставить для них поддержку по умолчанию в PHP5.4, не дает оснований для их использования. Их использование может создать нежелательную зависимость или вызвать путаницу с XML. Хорошее обсуждение здесь: stackoverflow.com/questions/200640/ - person Ian Lewis; 09.07.2013
comment
Ян. Мы говорим не о коротком открытом теге <? echo $var ?>, а о коротком открытом теге <?= $var ?>. Afaik XML не должен подвергаться влиянию. - person RJD22; 10.07.2013
comment
У нас есть тест на кодирование PHP, и мы иногда получаем заявки, в которых используется короткий тег ‹? =. К сожалению, предположение о том, что этот стиль используется повсюду, немного наивно и часто исходит от разработчиков, выросших на диете ASP. Ясно, что он доступен, но его использование является микрооптимизацией и не удастся из-за переносимости, что очень досадно. - person Ian Lewis; 10.07.2013
comment
@IanLewis Я не согласен. Короткий тег PHP не имеет ничего общего с ASP. Лучшая причина, по которой вы захотите использовать <?= , - это создание шаблонов, и я думаю, что это вполне обоснованный вариант. Другие языки шаблонов, такие как усы, также используют короткие простые теги {{var}}. PHP часто используется в качестве языка шаблонов, и необходимость делать <?php echo $var ?> намного уродливее, чем <?=$var?> во встроенном HTML. - person RJD22; 10.07.2013
comment
Это интересная дискуссия, которая становится очень субъективной. Я не верю, что красивый код обязательно лучше, чем код, который демонстрирует некоторую уродливость. Я считаю, что версия ‹? = $ Var?› Выглядит намного более загруженной и менее читаемой, чем более открытая, но более длинная версия. Связь с ASP должна быть широко распространенным восприятием, поскольку несколько знакомых мне разработчиков делают одну и ту же ссылку без запроса. - person Ian Lewis; 10.07.2013
comment
Это должен быть php_flag вместо php_value, поскольку он устанавливает логическое значение. - person Julian; 06.09.2017
comment
@IanLewis Мы можем использовать пространство, чтобы сделать `‹? = $ Var? ›Менее шумным. См. Официальный пример: php.net/manual/ ru / language.basic-syntax.phpmode.php # example-40 - person ; 14.09.2019
comment
Интерполяция чище, чем конкатенация. "Hi {$name}! Last login: {$date}." лучше, чем "Hi ".$name."! Last login: ".$date.".". При создании контента вы хотите, чтобы фокус был на самом контенте. То же самое относится и к использованию PHP для создания шаблонов. Hi <?=$name?>! Last login: <?=$date?>. некрасиво, но лучше, чем Hi <?php echo $name?>! Last login: <?php echo $date?>. - person obe; 04.01.2021

Это можно сделать, включив short_open_tag в php.ini:

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

Спасибо

person user2086641    schedule 26.08.2013

Чтобы установить короткие теги для открытия из сценария установки Vagrant в Ubuntu:

sed -i "s/short_open_tag = .*/short_open_tag = On/" /etc/php5/apache2/php.ini
person Bradley Flood    schedule 16.01.2014

Я вижу, что все приведенные выше ответы верны только частично. На самом деле все PHP-приложения 21-го века будут иметь 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
person Eddy Ferreira    schedule 03.07.2014
comment
В моем случае: sudo service php7.0-fpm restart - person Sampath Perera; 03.06.2016
comment
sudo service php-fpm restart будет работать для любой версии PHP по умолчанию, установленной на вашем компьютере, если у вас нет нескольких версий, и в этом случае вы должны указать версию, на которую вы ссылаетесь - person Eddy Ferreira; 04.06.2016
comment
Только перезапуск nginx не помог мне. Фактически, функция phpini () продолжала показывать short_open_tag как Off. Я просто перезагрузил сервер, и все заработало. Довольно радикально, но все же быстрее, чем исследовать, почему ... - person Fran Marzoa; 20.06.2017

вам нужно включить short_open_tags.

short_open_tag = On
person Jage    schedule 02.02.2010

Вот так просто: выполните следующие действия:

  1. Перейти к php.ini файлу
  2. Найдите short_open_tag и установите on

    short_open_tag = On
    
  3. Перезагрузите сервер

person Suresh KUMAR Mukhiya    schedule 10.02.2013

В CentOS 6 (также протестирован на Centos 7) вы не можете установить short_open_tag в /etc/php.ini для php-fpm. У вас будет ошибка:

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
person XakRu    schedule 06.11.2013
comment
Пришлось сделать это на Debian Jessie. На самом деле это может относиться ко всем установкам PHP5-FPM. - person Bertrand; 21.01.2016
comment
Это потому, что вы не включаете php.ini в php-fpm.conf. - person miken32; 20.05.2021
comment
@ miken32, нет возможности включить php.ini в php-fpm.conf. Ваш комментарий может запутать читателя. Ответ был написан восемь лет назад, думаю, вам не стоило его комментировать, ответ может быть устаревшим. - person XakRu; 18.06.2021
comment
Сказать, что вы не можете установить short_open_tag в /etc/php.ini для php-fpm, неправильно, и это было неправильно 8 лет назад. Это в вашем выводе: Невозможно включить /etc/php.ini из /etc/php-fpm.conf в строку 159, что означает, что вы пытались включить php.ini в php-fpm.conf. - person miken32; 18.06.2021

Если вы используете Ubuntu с Apache+php5, то в текущих версиях есть 2 места, где вам нужно перейти на short_open_tag = On

  1. /etc/php5/apache2/php.ini - это для страниц, загружаемых через ваш веб-сервер (Apache)
  2. /etc/php5/cli/php.ini - эта конфигурация используется при запуске файлов php из командной строки, например: php yourscript.php - для файлов php, выполняемых вручную или cronjob непосредственно на сервере.
person Vladas Freimanas    schedule 21.01.2015

если вы редактируете файл php.ini, не забудьте перезапустить службу (apache2 и т. д.), чтобы изменения в php.ini вступили в силу

person Steve Wasiura    schedule 27.04.2011

Для пользователей Wamp Server есть более простой способ: вы можете включить эту настройку, просто щелкнув один раз (левой кнопкой мыши) по значку WampServer, выберите PHP -> Настройки PHP -> короткий открытый тег. Подождите секунду, затем WampServer автоматически перезапустит ваш PHP, а также его веб-службу.

изначально из: http://osticket.com/forums/showthread.php?t=3149 < / а>

person Reza Ameri    schedule 21.09.2012

при использовании xampp вы заметите, что в файле php.ini дважды упоминается short_open_tag. Включите второй параметр short_open_tag = On. Первый закомментирован, и у вас может возникнуть соблазн его раскомментировать и отредактировать, но он заменяется вторым short_open_tag

person Roger Gajraj    schedule 04.12.2013

Если вы используете xampp в Windows, выполните следующие действия.

  1. Откройте панель управления XAMPP.
  2. Нажмите кнопку КОНФИГУРАЦИЯ.
  3. Перейдите к опции PHP (php.ini).

Найдите short_open_tag с помощью утилиты ctrl + f

Вы найдете ;short_open_tag

удалите точку с запятой (;) из строки.

и оставьте это как short_open_tag = on

Наконец, перезапустите сервер Apache

person Praful Rajput    schedule 21.11.2014

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

Это работает на php7.2 на ubuntu 16, тот же ответ, что и выше, от Брэдли Флода, хотя каталог, в котором хранится файл конфигурации, изменился.

Также вы можете изменить версию в строке php, чтобы она соответствовала вашей текущей установленной версии.

person Raymie    schedule 18.07.2018

Вы можете выполнить следующие шаги:

1- ›Перейдите к php.ini файлу внутри /etc/php/7.3/apache2 или внутри PHP version и

2- ›Найдите short_open_tag, установите для него On и удалите ; из запуска.

short_open_tag = On

3- ›Перезагрузите сервер.

sudo service apache2 restart
person Vishal Thakur    schedule 22.05.2021

Для докера добавьте этот шаг в Dockerfile

  ARG phpIniPath=/path/to/your/php.ini

  RUN sed -i -e 's/^short_open_tag\s*=.*/short_open_tag = On/' $phpIniPath  
person Sergey Pavlov    schedule 27.01.2021

Чтобы включить short_open_tag для определенного домена с помощью php-fpm, вы должны отредактировать:

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

Где xxxxx - номер сокета домена.

И добавьте: php_value [short_open_tag] = On

person contremaitre    schedule 13.03.2017

 short_open_tag = On

в php.ini И перезапустите сервер Apache.

person Muhibbullah Muhi    schedule 11.01.2018

Я изменил short_open_tag Off на On на моем экземпляре aws centos 7 и php7 (PHP 7.0.33 (cli) (построено: 6 декабря 2018 22:30:44) (NTS)), но это не отражает страницу информации 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
person bibincatchme    schedule 26.04.2019

Установите asp_tags = On и short_open_tag = On в обоих файлах \apache\Apache2.2.21\bin\php.ini и \bin\php\php5.3.8\php.ini, а затем перезапустите сервер apache.

person kal    schedule 14.03.2012
comment
asp, скорее всего, опечатка. Почему сообщество не может проявить немного милосердия к @kal? - person n8bar; 07.04.2017