Як увімкнути короткі теги PHP?


324

У мене є веб-додаток на сервері Linux, з якого починається <?

Мені потрібно було скопіювати цю програму у середовище Windows, і все працює нормально, за винятком того, що оператор SQL надається інакше. Я не знаю, чи це стосується сценарію, який починається <?phpзамість того, <?що я не знаю, звідки ввімкнути функцію <?з, PHP.iniтому я змінив її на<?php

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

Дякую



Однак історія все ще розвивається . Слідкуйте за налаштуваннями. :)
єпископ

Відповіді:


559

Встановити

short_open_tag=On

в php.ini

І перезапустіть сервер Apache.


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).
Похвальний Раджпут

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


5
Короткі відкриті теги - це не обов'язково погана практика (я намагаюся тут бути відкритою), але лише тому, що Rasmus та ін. вирішили надати підтримку за замовчуванням для них у PHP5.4, не надає обґрунтування для їх використання. Використання їх може створити залежність, небажану пізніше, або спричинити плутанину з XML. Ось хороша дискусія тут: stackoverflow.com/questions/200640/…
Ian Lewis

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. Відкрийте файл php.ini і знайдіть short_open_tag. За замовчуванням це offзмінюється наon .

3.Запустіть сервер, виконайте цей коментар

service httpd restart

Дякую


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 () у свій тест.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
У моєму випадку: перезапуск служби php7.0-футів в хвилині SUDO
Сампатй перерву

sudo service php-fpm перезапуск буде працювати для будь-якої версії PHP, встановленої за замовчуванням, встановленої на коробці, якщо у вас є кілька версій, у цьому випадку ви повинні вказати версію, на яку ви посилаєтесь
Едді Феррейра

1
Перезапуск лише nginx не зробив для мене хитрість. Фактично, функція phpini () продовжувала показувати short_open_tag як Вимкнено. Я просто перезавантажив сервер і він працював.
Різний

10

вам потрібно ввімкнути short_open_tags.

short_open_tag = On

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

Довелося це зробити на Debian Jessie. Це може стосуватися всіх фактично встановлень 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- що стосується файлів php, виконаних вручну або за допомогою Cronjob, безпосередньо на сервері.

6

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


5

Для користувачів Wamp Server є простіший спосіб: ви можете включити цей параметр просто (лівий) клацання один раз на піктограмі WampServer, виберіть PHP -> PHP settings -> короткий відкритий тег. Зачекайте секунду, тоді 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

1

якщо ви використовуєте xampp, ви помітите, що файл php.ini вже двічі згадував short_open_tag. Увімкніть другу для short_open_tag = Увімкнено. Перший коментується, і ви можете спокусити його коментувати та відредагувати, але його перекидає другий 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

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

І додайте: php_value [short_open_tag] = Увімкнено


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

Це працює на php7.2 на ubuntu 16, таку ж відповідь, що і Бредлі Флуд, хоча каталог, у якому зберігається конфігураційний файл, змінився.

Також ви можете змінити версію в рядку php, щоб вона відповідала поточно встановленій версії.



-2

Я змінив short_open_tag Off на Увімкнено на моїх aws centos 7 instance та php7 (PHP 7.0.33 (cli) (побудовано: 6 грудня 2018 22:30:44) (NTS)), але його не відображає інформаційну сторінку php і код. Тому я посилаюсь, можливо, документи та знаходжу рішення щодо своєї справи. Додайте додатковий рядок після short_open_tag як asp_tags = Увімкнено після цього перезапуску 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 = 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.