Comment activer les balises PHP courtes?


324

J'ai une application Web sur un serveur Linux qui commence par <?

J'avais besoin de copier cette application dans un environnement Windows et tout fonctionne bien sauf qu'une instruction SQL est rendue différemment. Je ne sais pas si cela a à voir avec le script commençant par <?phpau lieu de <?parce que je ne sais pas d'où activer le à <?partir du PHP.inidonc je l'ai changé en<?php

Je sais que ces 2 déclarations sont censées signifier la même chose, mais je dois les tester <?afin de m'assurer que l'application est exactement la même. De cette façon, je peux éliminer une autre possibilité.

Merci



Cependant, l'histoire continue de se développer . Restez à l'écoute. :)
évêque

Réponses:


559

Ensemble

short_open_tag=On

dans php.ini

Et redémarrez votre serveur Apache.


54
Si PHP fonctionne en tant que module Apache, vous pouvez également le définir dans un fichier .htaccess: php_flag short_open_tag on
Álvaro González

12
Plus lileky de/etc/php5/apache2/php.ini
Benjamin Crouzier

@pinouchon, seedeg a écrit qu'il passe à Windows, mais votre commentaire m'aide :)
Line

7
Utilisez php --inipour localiser le fichier de configuration chargé (Fichier de configuration chargé: /etc/php5/cli/php.ini)
Wietse

Si vous utilisez xampp dans Windows, veuillez ouvrir le panneau de configuration XAMPP, cliquer sur le bouton CONFIG et aller à l'option PHP (php.ini).
Praful Rajput

80

Cela peut être fait en activant short_open_tag dans php.ini :

short_open_tag = on

Si vous n'avez pas accès au php.ini, vous pouvez essayer de les activer via le fichier .htaccess mais il est possible que la société d'hébergement ait désactivé cela si vous êtes sur un hébergement partagé:

php_value short_open_tag 1

Pour les personnes qui pensent que les short_open_tags sont de mauvaises pratiques à partir de php 5.4, le <?= ... ?>shorttag sera pris en charge partout , quels que soient les paramètres, il n'y a donc aucune raison de ne pas les utiliser si vous pouvez contrôler les paramètres sur le serveur. Également dit dans ce lien: short_open_tag


5
Les balises ouvertes courtes ne sont pas nécessairement de mauvaises pratiques (j'essaie de garder l'esprit ouvert ici), mais simplement parce que Rasmus et al. décidé de leur fournir un support par défaut en PHP5.4 ne justifie pas leur utilisation. Leur utilisation peut créer une dépendance indésirable ultérieurement ou provoquer une confusion avec XML. Une bonne discussion ici: stackoverflow.com/questions/200640/…
Ian Lewis

1
Ian. Nous ne parlons pas de la <? echo $var ?>balise ouverte courte mais de la <?= $var ?>balise ouverte courte. Afaik XML ne devrait pas être affecté.
RJD22

Nous avons un test de codage PHP et recevons occasionnellement des soumissions où la balise <? = Short a été utilisée. Malheureusement, l'hypothèse selon laquelle ce style est utilisé partout est un peu naïve et provient souvent de développeurs ayant suivi un régime ASP. Clairement, il est disponible mais son utilisation est une micro-optimisation et échouera pour des raisons de portabilité, ce qui est dommage.
Ian Lewis

6
@IanLewis Je ne suis pas d'accord. La balise PHP courte n'a rien à voir avec ASP. La meilleure raison pour laquelle vous voudriez l'utiliser <?= est pour les modèles et je pense que c'est assez valable. D'autres langages de modèles comme la moustache utilisent également de courtes balises simples {{var}}. PHP est souvent utilisé comme langage de template et devoir faire <?php echo $var ?>est tellement plus laid qu'en <?=$var?>HTML inline.
RJD22

C'est un débat intéressant et devient très subjectif, je ne crois pas qu'un beau code soit nécessairement meilleur qu'un code qui montre un peu de laideur inhérente. Ma propre opinion ici est que la version <? = $ Var?> Semble beaucoup plus encombrée et beaucoup moins lisible que la version plus ouverte, mais plus longue. Le lien avec ASP doit être une perception courante alors que plusieurs développeurs que je connais font tous le même lien sans invite.
Ian Lewis

19

Cela peut être fait en activant short_open_tag dans php.ini:

1.Pour localiser le fichier php.ini, exécutez la ligne de commentaire

 php --ini

vous obtiendrez quelque chose comme ça,

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

Voir la 2ème ligne de la sortie du commentaire. Le fichier sera dans le chemin mentionné.

2.Ouvrez le fichier php.ini et recherchez short_open_tag. Par défaut, il est offremplacé par on.

Redémarrez le serveur, exécutez ce commentaire

service httpd restart

Merci


18

Pour définir des balises courtes à ouvrir à partir d'un script d'installation Vagrant sur Ubuntu:

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

12

Je peux voir que toutes les réponses ci-dessus sont partiellement correctes uniquement. En réalité, toutes les applications PHP du 21e siècle auront FastCGI Process Manager (php-fpm) donc une fois que vous avez ajouté php-info () dans votre script test.php et vérifié le chemin correct pour php.ini

Go to php.ini and set short_open_tag = On

IMPORTANT: vous devez alors redémarrer votre processus php-fpm pour que cela fonctionne!

sudo service php-fpm restart

puis redémarrez enfin votre serveur nginx / http

sudo service nginx restart

2
Dans mon cas: redémarrage du service sudo php7.0-fpm
Sampath Perera

sudo service php-fpm restart fonctionnera pour toute version par défaut de PHP que vous avez installée sur votre box, sauf si vous avez plusieurs versions auquel cas vous devez spécifier la version à laquelle vous faites référence
Eddy Ferreira

1
Le redémarrage de nginx n'a pas fait l'affaire pour moi. En fait, la fonction phpini () a continué à afficher short_open_tag comme Off. Je viens de redémarrer le serveur et cela a fonctionné. Un peu drastique, mais toujours plus rapide que de chercher pourquoi ...
Fran Marzoa

10

vous devez activer short_open_tags.

short_open_tag = On

10

Aussi simple que cela, suivez les étapes suivantes:

  1. Accéder au php.inifichier
  2. Trouvez-le short_open_taget réglez-le suron

    short_open_tag = On
  3. Redémarrez le serveur


9

Dans CentOS 6 (testé également sur Centos 7), vous ne pouvez pas définir short_open_tag dans /etc/php.ini pour php-fpm. Vous aurez une erreur:

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

Vous devez modifier la configuration de votre site, qui se trouve dans /etc/php-fpm.d/www.conf Et écrire à la fin du fichier:

php_value[short_open_tag] =  On

J'ai dû le faire sur une Debian Jessie. Cela peut s'appliquer à toutes les installations PHP5-FPM.
Bertrand

7

Si vous utilisez Ubuntuavec Apache+php5, alors sur les versions actuelles il y a 2 endroits où vous devez changer pourshort_open_tag = On

  1. /etc/php5/apache2/php.ini - c'est pour les pages chargées via votre serveur web (Apache)
  2. /etc/php5/cli/php.ini- cette configuration est utilisée lorsque vous lancez vos fichiers php à partir de la ligne de commande, comme: php yourscript.php- cela vaut pour les fichiers php exécutés manuellement ou cronjob directement sur le serveur.

6

si vous modifiez votre fichier php.ini, n'oubliez pas de redémarrer votre service (apache2, etc.) pour que les modifications de php.ini prennent effet


5

Pour les utilisateurs de Wamp Server, il existe un moyen plus simple: vous pouvez activer ce paramètre en cliquant simplement (à gauche) une fois sur l'icône WampServer, choisissez PHP -> Paramètres PHP -> balise ouverte courte. Attendez une seconde, puis WampServer redémarrera automatiquement votre PHP ainsi que son service web.

originellement de: 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

si vous utilisez xampp, vous remarquerez que le fichier php.ini a mentionné deux fois short_open_tag. Activez le second sur short_open_tag = On. Le premier est commenté et vous pourriez être tenté de décommenter et de le modifier, mais il est remplacé par un second short_open_tag


1

Si vous utilisez xampp dans Windows, veuillez procéder comme suit

  1. Ouvrez le panneau de configuration XAMPP.
  2. Cliquez sur le bouton CONFIG.
  3. Allez dans l'option PHP (php.ini).

Rechercher short_open_tag à l'aide de l'utilitaire ctrl + f

Vous trouverez ;short_open_tag

veuillez supprimer le point-virgule (;) de la ligne.

et le garder comme short_open_tag = on

Enfin, redémarrez votre serveur Apache


0

Pour activer short_open_tag pour un domaine particulier avec php-fpm, vous devez modifier:

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

Où xxxxx est le numéro de socket du domaine.

Et ajoutez: php_value [short_open_tag] = On


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

Cela fonctionne sur php7.2 sur ubuntu 16, même réponse que ci-dessus par Bradley Flood, bien que le répertoire dans lequel le fichier de configuration est stocké ait changé.

Vous pouvez également changer la version dans la chaîne php pour correspondre à votre version actuellement installée.



-2

J'ai changé le short_open_tag Off en On sur mon instance aws centos 7 et php7 (PHP 7.0.33 (cli) (construit: 6 décembre 2018 22:30:44) (NTS)), mais cela ne reflète pas la page d'informations php et le code. Je me réfère donc à May Docs et trouve une solution à mon cas. Ajouter une ligne supplémentaire après le short_open_tag comme asp_tags = On après ce redémarrage Apache Cela fonctionne sur le code et je passe la sortie correctement

fichier 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

Réglez le asp_tags = Onet short_open_tag = Ondans les deux fichiers \apache\Apache2.2.21\bin\php.iniet \bin\php\php5.3.8\php.ini puis redémarrez le serveur apache.


6
asp_tags? pourquoi?
Votre bon sens

1
asp est très probablement une faute de frappe. Pourquoi la communauté ne peut-elle pas montrer juste un peu de pitié pour @kal?
n8bar
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.