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

324

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

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

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

Спасибо

seedg
источник

Ответы:

559

Устанавливать

short_open_tag=On

в php.ini

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

codaddict
источник
54
Если PHP работает как модуль Apache, вы также можете установить его в файле .htaccess: php_flag short_open_tag on
Альваро Гонсалес,
12
Больше всего в этом/etc/php5/apache2/php.ini
Бенджамин Крузье
@pinouchon, seedeg написал, что он переходит на Windows, но твой комментарий мне помогает :)
Строка
7
Используйте php --iniдля поиска загруженного файла конфигурации (загруженный файл конфигурации: /etc/php5/cli/php.ini)
Wietse
Если вы используете xampp в Windows, пожалуйста, откройте панель управления XAMPP, нажмите кнопку CONFIG и перейдите к опции PHP (php.ini).
Praful Раджпут
80

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

short_open_tag = on

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

php_value short_open_tag 1

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

RJD22
источник
5
Короткие открытые теги не обязательно являются плохой практикой (здесь я стараюсь быть непредвзятым), но только потому, что Rasmus et al. решил предоставить поддержку по умолчанию для них в PHP5.4 не дает обоснования для их использования. Их использование может создать зависимость, которая в дальнейшем нежелательна, или вызвать путаницу с XML. Хорошая дискуссия здесь: stackoverflow.com/questions/200640/…an
Ян Льюис,
1
Ян. Мы говорим не о <? echo $var ?>коротком открытом теге, а о <?= $var ?>коротком открытом теге. Afaik XML не должен быть затронут.
RJD22
У нас есть тест на кодирование PHP, и мы периодически получаем материалы, в которых использовался короткий тег <? =. К сожалению, предположение, что этот стиль используется везде, немного наивно и часто исходит от разработчиков, воспитанных на диете ASP. Ясно, что он доступен, но его использование является микрооптимизацией и потерпит неудачу из-за переносимости, что является позором.
Ян Льюис,
6
@IanLewis Я не согласен. Короткий тег PHP не имеет ничего общего с ASP. Лучшая причина, по которой вы хотели бы использовать, <?= - шаблоны, и я думаю, что это довольно веская причина . Другие шаблоныные языки, такие как усы, также используют короткие простые теги {{var}}. PHP часто используется в качестве языка шаблонов, и необходимость делать <?php echo $var ?>это намного сложнее, чем <?=$var?>во встроенном HTML.
RJD22
Это интересная дискуссия, которая становится очень субъективной, я не верю, что красивый код обязательно лучше, чем код, который демонстрирует немного присущего уродства. Я считаю, что версия <? = $ Var?> Выглядит гораздо более насыщенной и менее читаемой, чем более открытая, но более длинная версия. Связь с ASP должна быть общим восприятием, так как несколько известных мне разработчиков делают одну и ту же ссылку без запроса.
Ян Льюис
19

Это можно сделать, включив 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-ую строку из вывода комментария. Файл будет по указанному пути.

2. Откройте файл php.ini и найдите short_open_tag. По умолчанию он offизменяется на on.

3. Перезапустите сервер, выполните этот комментарий

service httpd restart

Спасибо

user2086641
источник
18

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

sed -i "s/short_open_tag = .*/short_open_tag = On/" /etc/php5/apache2/php.ini
Брэдли Флуд
источник
12

Я вижу, что все ответы выше являются только частично правильными. На самом деле все приложения 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
Эдди Феррейра
источник
2
В моем случае: перезапуск службы sudo php7.0-fpm
Sampath Perera
Служба sudo php-fpm restart будет работать для любой версии PHP по умолчанию, которую вы установили на свой компьютер, если только у вас нет нескольких версий, в этом случае вы должны указать версию, на которую вы ссылаетесь
Eddy Ferreira
1
Перезапуск nginx не помог мне. Фактически, функция phpini () продолжала показывать short_open_tag как Off. Я просто перезагрузил сервер и все заработало. Отчасти радикально, но все же быстрее, чем исследования, почему ...
Фран Марзоа
10

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

short_open_tag = On
Jage
источник
10

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

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

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

Суреш Кумар Мухия
источник
9

В 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
XakRu
источник
Пришлось сделать это на Debian Джесси. Это может относиться ко всем установкам PHP5-FPM.
Бертран
7

Если вы используете 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- это относится к выполняемым вручную или cronjob php-файлам непосредственно на сервере.
Владас Фрейманас
источник
6

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

Стив Васиура
источник
5

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

родом из: http://osticket.com/forums/showthread.php?t=3149

Реза Амери
источник
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
Rhadley
источник
1

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

Роджер Гайрай
источник
1

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

  1. Откройте панель управления XAMPP.
  2. Нажмите на кнопку CONFIG.
  3. Перейти к PHP (php.ini) вариант.

Найти short_open_tag используя утилиту ctrl + f

Вы найдете ;short_open_tag

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

и держать его как short_open_tag = on

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

Прафул Раджпут
источник
0

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

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

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

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

contremaitre
источник
0
sed -i "s/short_open_tag = .*/short_open_tag = On/" /etc/php/7.2/apache2/php.ini

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

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

Raymie
источник
-1
 short_open_tag = On

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

Мухибулла Мухи
источник
-2

Я изменил значение short_open_tag на «Вкл» на своем экземпляре 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
bibincatchme
источник
-5

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

кал
источник
6
asp_tags? зачем?
Ваш здравый смысл
1
Asp, скорее всего, опечатка. Почему сообщество не может проявить немного жалости к @kal?
n8bar