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



Jednak historia wciąż się rozwija . Bądźcie czujni. :)
biskup

Odpowiedzi:


559

Zestaw

short_open_tag=On

w php.ini

I uruchom ponownie serwer Apache.


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


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


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

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

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

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


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

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.

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


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


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

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


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


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


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.



-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

-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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.