Jak włączyć krótkie tagi PHP?

324

Mam aplikację internetową na serwerze Linux, która zaczyna się od <?

Musiałem skopiować tę aplikację do środowiska Windows i wszystko działa dobrze, z wyjątkiem tego, że instrukcja SQL jest renderowana inaczej. Nie wiem, czy ma to związek z skrypt począwszy <?phpzamiast <?ponieważ nie wiem, skąd się włączyć <?z PHP.iniwięc zmieniłem je<?php

Wiem, że te 2 stwierdzenia mają znaczyć to samo, ale muszę je przetestować <?, aby upewnić się, że aplikacja jest dokładnie taka sama. W ten sposób mogę wyeliminować inną możliwość.

Dzięki

seedg
źródło

Odpowiedzi:

559

Zestaw

short_open_tag=On

w php.ini

I uruchom ponownie serwer Apache.

kodaddict
źródło
54
Jeśli PHP działa jako moduł Apache, możesz również ustawić go w pliku .htaccess: php_flag short_open_tag on
Álvaro González
12
Najbardziej leniwy w/etc/php5/apache2/php.ini
Benjamin Crouzier
@pinouchon, seedeg napisał, że przenosi się do systemu Windows, ale Twój komentarz mi pomaga :)
Linia
7
Służy php --inido zlokalizowania załadowanego pliku konfiguracyjnego (Załadowany plik konfiguracyjny: /etc/php5/cli/php.ini)
Wietse
Jeśli używasz xampp w Windows, otwórz panel sterowania XAMPP, kliknij przycisk CONFIG i przejdź do opcji PHP (php.ini).
Praful Rajput
80

Można to zrobić, włączając short_open_tag w php.ini :

short_open_tag = on

Jeśli nie masz dostępu do php.ini, możesz spróbować włączyć je za pomocą pliku .htaccess , ale możliwe jest, że firma hostingowa wyłączyła to, jeśli korzystasz z hostingu współdzielonego:

php_value short_open_tag 1

Dla osób myślących, że short_open_tags są złą praktyką od wersji php 5.4, <?= ... ?>shorttag będzie obsługiwany wszędzie , niezależnie od ustawień, więc nie ma powodu, aby ich nie używać, jeśli możesz kontrolować ustawienia na serwerze. Powiedział także w tym linku: short_open_tag

RJD22
źródło
5
Krótkie otwarte tagi niekoniecznie są złą praktyką (staram się tutaj zachować otwarty umysł), ale tylko dlatego, że Rasmus i in. zdecydował się na zapewnienie domyślnego wsparcia dla nich w PHP5.4 nie uzasadnia ich użycia. Korzystanie z nich może stworzyć zależność, która jest później niepożądana lub powodować pomyłki z XML. Dobra dyskusja tutaj: stackoverflow.com/questions/200640/…
Ian Lewis
1
Ian. Nie mówimy o <? echo $var ?>krótkim otwartym tagu, ale o <?= $var ?>krótkim otwartym tagu. Afaik XML nie powinien mieć wpływu.
RJD22,
Mamy test kodowania PHP i od czasu do czasu otrzymujemy zgłoszenia, w których użyto krótkiego znacznika <? =. Niestety założenie, że ten styl jest wszędzie używany, jest trochę naiwne i często pochodzi od programistów wychowanych na diecie ASP. Oczywiście jest on dostępny, ale jego użycie jest mikrooptymalizacją i zawiedzie ze względu na przenośność, co jest wstydem.
Ian Lewis,
6
@IanLewis Nie zgadzam się. Krótki znacznik PHP nie ma nic wspólnego z ASP. Najlepszym powodem, dla którego chciałbyś skorzystać, <?= jest szablonowanie i myślę, że jest to dość poprawne. Inne języki szablonów, takie jak wąsy, również używają krótkich prostych tagów {{var}}. PHP jest często używany jako język szablonów, a jego robienie <?php echo $var ?>jest o wiele brzydsze niż <?=$var?>w wbudowanym HTML.
RJD22,
To interesująca debata i staje się bardzo subiektywna, nie sądzę, aby piękny kod był koniecznie lepszy niż kod, który pokazuje trochę nieodłącznej brzydoty. Moim zdaniem tutaj wersja <? = $ Var?> Wygląda na znacznie bardziej zatłoczoną i znacznie mniej czytelną niż wersja bardziej otwarta, ale dłuższa. Łącze z ASP musi być powszechnym postrzeganiem, ponieważ kilku programistów, o których wiem, wszyscy tworzą to samo łącze bez monitowania.
Ian Lewis,
19

Można to zrobić, włączając short_open_tag w php.ini:

1. Aby zlokalizować plik php.ini, w wierszu komentarza wykonaj

 php --ini

dostaniesz coś takiego,

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

Zobacz drugi wiersz z wyniku komentarza. Plik będzie we wspomnianej ścieżce.

2. Otwórz plik php.ini i znajdź short_open_tag. Domyślnie offzmienia się na on.

3. Uruchom ponownie serwer, wykonaj ten komentarz

service httpd restart

Dzięki

user2086641
źródło
18

Aby ustawić krótkie tagi do otwarcia ze skryptu instalacyjnego Vagrant na Ubuntu:

sed -i "s/short_open_tag = .*/short_open_tag = On/" /etc/php5/apache2/php.ini
Bradley Flood
źródło
12

Widzę, że wszystkie powyższe odpowiedzi są tylko częściowo poprawne. W rzeczywistości wszystkie aplikacje PHP XXI wieku będą miały FastCGI Process Manager (php-fpm), więc po dodaniu php-info () do skryptu test.php i sprawdzeniu poprawnej ścieżki dla php.ini

Go to php.ini and set short_open_tag = On

WAŻNE: musisz ponownie uruchomić proces php-fpm, aby to zadziałało!

sudo service php-fpm restart

a następnie w końcu zrestartuj serwer nginx / http

sudo service nginx restart
Eddy Ferreira
źródło
2
W moim przypadku: usługa sudo php7.0-fpm restart
Sampath Perera
usługa sudo php-fpm restart będzie działać dla każdej domyślnej wersji PHP zainstalowanej na twoim urządzeniu, chyba że masz wiele wersji, w którym to przypadku musisz podać wersję, o której mowa
Eddy Ferreira
1
Ponowne uruchomienie nginx tylko mi nie pomogło. W rzeczywistości funkcja phpini () nadal wyświetlała short_open_tag jako Off. Właśnie uruchomiłem ponownie serwer i działało. Trochę drastyczne, ale wciąż szybsze niż badanie, dlaczego ...
Fran Marzoa
10

musisz włączyć short_open_tags.

short_open_tag = On
Jage
źródło
10

Tak proste, jak to, wykonaj następujące kroki:

  1. Idź do php.inipliku
  2. Znajdź short_open_tagi ustaw naon

    short_open_tag = On
  3. Uruchom ponownie serwer

Suresh KUMAR Mukhiya
źródło
9

W CentOS 6 (testowanym również na Centos 7) nie można ustawić short_open_tag w /etc/php.ini dla php-fpm. Będziesz miał błąd:

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

Musisz edytować config dla swojej witryny, który można znaleźć w /etc/php-fpm.d/www.conf I napisać na końcu pliku:

php_value[short_open_tag] =  On
XakRu
źródło
Musiałem to zrobić na Debian Jessie. Może to dotyczyć wszystkich instalacji PHP5-FPM.
Bertrand
7

Jeśli używasz Ubuntuz Apache+php5, to w obecnych wersjach są 2 miejsca, w których musisz się zmienićshort_open_tag = On

  1. /etc/php5/apache2/php.ini - dotyczy stron ładowanych przez twój serwer WWW (Apache)
  2. /etc/php5/cli/php.ini- ta konfiguracja jest używana podczas uruchamiania plików php z wiersza poleceń, takich jak: php yourscript.php- dotyczy ręcznych lub cronjob wykonywanych plików php bezpośrednio na serwerze.
Vladas Freimanas
źródło
6

jeśli edytujesz plik php.ini, pamiętaj o ponownym uruchomieniu usługi (apache2 itp.), aby zmiany wprowadzone w php.ini weszły w życie

Steve Wasiura
źródło
5

Dla użytkowników Wamp Server jest łatwiejszy sposób: możesz włączyć to ustawienie po prostu (lewy) raz kliknąć ikonę WampServer, wybierz PHP -> Ustawienia PHP -> krótki otwarty tag. Poczekaj chwilę, a następnie WampServer automatycznie zrestartuje twój PHP, a także jego serwis internetowy.

Pierwotnie z: http://osticket.com/forums/showthread.php?t=3149

Reza Ameri
źródło
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
źródło
1

jeśli używasz xampp, zauważysz, że w pliku php.ini dwukrotnie wspomniano short_open_tag. Włącz drugi do short_open_tag = On. Pierwszy jest skomentowany i możesz ulec pokusie, aby anulować komentarz i edytować go, ale jest on przesłonięty przez drugi short_open_tag

Roger Gajraj
źródło
1

Jeśli używasz xampp w Windows, wykonaj następujące czynności

  1. Otwórz panel sterowania XAMPP.
  2. Kliknij przycisk CONFIG.
  3. Przejdź do opcji PHP (php.ini).

Znajdź short_open_tag za pomocą narzędzia ctrl + f

Znajdziesz ;short_open_tag

uprzejmie usuń średnik (;) z wiersza.

i zachowaj to jako short_open_tag = on

Na koniec zrestartuj serwer Apache

Praful Rajput
źródło
0

Aby włączyć short_open_tag dla konkretnej domeny z php-fpm, musisz edytować:

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

Gdzie xxxxx to numer gniazda domeny.

I dodaj: php_value [short_open_tag] = On

contremaitre
źródło
0
sed -i "s/short_open_tag = .*/short_open_tag = On/" /etc/php/7.2/apache2/php.ini

Działa to na php7.2 na Ubuntu 16, ta sama odpowiedź jak powyżej autorstwa Bradleya Flooda, chociaż katalog, w którym przechowywany jest plik konfiguracyjny, zmienił się.

Możesz także zmienić wersję w ciągu php, aby pasowała do aktualnie zainstalowanej wersji.

Raymie
źródło
-1
 short_open_tag = On

w php.ini i zrestartować Apache Server.

Muhibbullah Muhi
źródło
-2

Zmieniłem short_open_tag Off na On w moim aws centos 7 instance i php7 (PHP 7.0.33 (cli) (build: 6 grudnia 2018 22:30:44) (NTS)), ale nie odzwierciedla strony informacyjnej php i kod. Odsyłam więc może dokumenty i znajduję rozwiązanie w mojej sprawie. Dodaj dodatkową linię po short_open_tag jako asp_tags = On po tym zrestartuj Apache Działa na kodzie i poprawnie przesyłam dane wyjściowe

plik 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
źródło
-5

Ustaw asp_tags = Oni short_open_tag = Onw obu plików \apache\Apache2.2.21\bin\php.inii \bin\php\php5.3.8\php.ini , a następnie ponownie uruchom serwer apache.

kal
źródło
6
asp_tags? po co?
Twój zdrowy rozsądek
1
asp jest najprawdopodobniej literówką. Dlaczego społeczność nie może okazać odrobiny litości dla @kal?
n8bar