¿Cómo habilitar las etiquetas cortas de PHP?

324

Tengo una aplicación web en un servidor Linux que comienza con <?

Necesitaba copiar esta aplicación en un entorno Windows y todo funciona bien, excepto que una declaración SQL se representa de manera diferente. No sé si esto tiene que ver con el guión que comienza con <?phpen lugar de <?porque no sé de dónde para permitir que el <?del PHP.inimodo que lo cambié a<?php

Sé que se supone que estas 2 declaraciones significan lo mismo, pero necesito probarlo <?para asegurarme de que la aplicación sea exactamente la misma. De esta manera puedo eliminar otra posibilidad.

Gracias

seedg
fuente
Sin embargo, la historia aún se está desarrollando . Manténganse al tanto. :)
obispo

Respuestas:

559

Conjunto

short_open_tag=On

en php.ini

Y reinicie su servidor Apache.

codictorio
fuente
54
Si PHP se ejecuta como módulo Apache, también puede configurarlo en un archivo .htaccess: php_flag short_open_tag on
Álvaro González
12
La mayoría de Lileky en/etc/php5/apache2/php.ini
Benjamin Crouzier
@pinouchon, seedeg escribió que se muda a Windows, pero su comentario me ayuda :)
Línea
77
Utilícelo php --inipara localizar el archivo de configuración cargado (Archivo de configuración cargado: /etc/php5/cli/php.ini)
Wietse
Si está utilizando xampp en Windows, abra el panel de control de XAMPP, haga clic en el botón CONFIG y vaya a la opción PHP (php.ini).
Praput Rajput
80

Esto se puede hacer habilitando short_open_tag en php.ini :

short_open_tag = on

Si no tiene acceso a php.ini, puede intentar habilitarlos a través del archivo .htaccess , pero es posible que la empresa de alojamiento lo desactive si está en un alojamiento compartido:

php_value short_open_tag 1

Para las personas que piensan que short_open_tags son una mala práctica a partir de php 5.4, la <?= ... ?>etiqueta corta será compatible en todas partes , independientemente de la configuración, por lo que no hay razón para no usarla si puede controlar la configuración en el servidor. También dicho en este enlace: short_open_tag

RJD22
fuente
55
Las etiquetas abiertas cortas no son necesariamente una mala práctica (estoy tratando de mantener una mente abierta aquí) sino solo porque Rasmus et al. decidió proporcionar soporte predeterminado para ellos en PHP5.4 no proporciona justificación para usarlos. Usarlos puede crear una dependencia que no es deseable más adelante o causar confusión con XML. Una buena discusión aquí: stackoverflow.com/questions/200640/…
Ian Lewis
1
Ian No estamos hablando de la <? echo $var ?>etiqueta abierta corta sino de la <?= $var ?>etiqueta abierta corta. Afaik XML no debería verse afectado.
RJD22
Tenemos una prueba de codificación PHP y ocasionalmente recibimos envíos donde se ha utilizado la etiqueta corta <? =. Desafortunadamente, la suposición de que este estilo está en uso en todas partes es un poco ingenua y a menudo proviene de desarrolladores criados con una dieta de ASP. Claramente está disponible, pero su uso es una microoptimización y fallará por razones de portabilidad, lo cual es una pena.
Ian Lewis
66
@ IanLewis No estoy de acuerdo. La etiqueta corta PHP no tiene nada que ver con ASP. La mejor razón por la que querrías usar <?= es para crear plantillas y creo que es bastante válida. Otros lenguajes de plantillas como el bigote también usan etiquetas cortas y simples {{var}}. PHP a menudo se usa como un lenguaje de plantillas y tener que hacerlo <?php echo $var ?>es mucho más feo que <?=$var?>el HTML en línea.
RJD22
Es un debate interesante y se vuelve altamente subjetivo, no creo que un código hermoso sea necesariamente mejor que un código que muestra un poco de la fealdad inherente. Mi opinión aquí es que la versión <? = $ Var?> Parece mucho más abarrotada y mucho menos legible que la versión más abierta, pero más larga. El enlace con ASP debe ser una percepción común, ya que varios desarrolladores que conozco hacen el mismo enlace sin preguntar.
Ian Lewis
19

Esto se puede hacer habilitando short_open_tag en php.ini:

1.Para localizar el archivo php.ini, en la línea de comentarios, ejecute

 php --ini

obtendrás algo como esto,

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

Vea la segunda línea de la salida del comentario. El archivo estará en la ruta mencionada.

2. Abra el archivo php.ini y busque short_open_tag. Por defecto está en offcambiarlo a on.

3. Reinicie el servidor, ejecute este comentario

service httpd restart

Gracias

usuario2086641
fuente
18

Para configurar etiquetas cortas para que se abran desde un script de instalación de Vagrant en Ubuntu:

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

Puedo ver que todas las respuestas anteriores son solo parcialmente correctas. En realidad, todas las aplicaciones PHP del siglo XXI tendrán FastCGI Process Manager (php-fpm), así que una vez que haya agregado php-info () en su script test.php y haya verificado la ruta correcta para php.ini

Go to php.ini and set short_open_tag = On

IMPORTANTE: ¡entonces debe reiniciar su proceso php-fpm para que esto pueda funcionar!

sudo service php-fpm restart

y finalmente reinicie su servidor nginx / http

sudo service nginx restart
Eddy Ferreira
fuente
2
En mi caso: reinicio del servicio sudo php7.0-fpm
Sampath Perera
el reinicio de sudo php-fpm funcionará para cualquier versión predeterminada de PHP que tenga instalada en su caja, a menos que tenga varias versiones en cuyo caso debe especificar la versión a la que se refiere
Eddy Ferreira
1
Reiniciar nginx solo no fue suficiente para mí. De hecho, la función phpini () continuó mostrando short_open_tag como Off. Acabo de reiniciar el servidor y funcionó. Un poco drástico, pero aún más rápido que investigar por qué ...
Fran Marzoa
10

necesitas activar short_open_tags.

short_open_tag = On
Jage
fuente
10

Tan simple como eso, siga los siguientes pasos:

  1. Ir al php.iniarchivo
  2. Encuéntralo short_open_tagy configúralo enon

    short_open_tag = On
  3. Reiniciar el servidor

Suresh KUMAR Mukhiya
fuente
9

En CentOS 6 (también probado en Centos 7) no puede configurar short_open_tag en /etc/php.ini para php-fpm. Tendrás error:

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

Debe editar la configuración de su sitio, que puede encontrar en /etc/php-fpm.d/www.conf y escribir al final del archivo:

php_value[short_open_tag] =  On
XakRu
fuente
Tenía que hacer esto en un Debian Jessie. Esto podría aplicarse a todas las instalaciones de PHP5-FPM en realidad.
Bertrand
7

Si está utilizando Ubuntucon Apache+php5, entonces en las versiones actuales hay 2 lugares donde debe cambiar ashort_open_tag = On

  1. /etc/php5/apache2/php.ini - esto es para las páginas cargadas a través de su servidor web (Apache)
  2. /etc/php5/cli/php.ini- esta configuración se usa cuando inicia sus archivos php desde la línea de comandos, como: php yourscript.php- eso se aplica a archivos php ejecutados manualmente o cronjob directamente en el servidor.
Vladas Freimanas
fuente
6

si edita su archivo php.ini, recuerde reiniciar su servicio (apache2, etc.) para que las modificaciones en php.ini surtan efecto

Steve Wasiura
fuente
5

Para los usuarios de Wamp Server hay una manera más fácil: puede habilitar esa configuración simplemente haciendo clic (izquierdo) una vez en el icono de WampServer, elija PHP -> Configuración de PHP -> etiqueta abierta corta. Espere un segundo, luego WampServer reiniciará automáticamente su PHP y también su servicio web.

Originalmente de: http://osticket.com/forums/showthread.php?t=3149

Reza Ameri
fuente
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
fuente
1

si usa xampp, notará que el archivo php.ini ha mencionado dos veces short_open_tag. Habilite el segundo para short_open_tag = On. El primero está comentado y es posible que tengas la tentación de descomentarlo y editarlo, pero un segundo short_open_tag lo anula

Roger Gajraj
fuente
1

Si está utilizando xampp en Windows, haga lo siguiente

  1. Abra el panel de control de XAMPP.
  2. Haga clic en el botón CONFIG.
  3. Vaya a la opción PHP (php.ini).

Encuentra short_open_tag usando la utilidad ctrl + f

Encontraras ;short_open_tag

Quite amablemente el punto y coma (;) de la línea.

y mantenerlo como short_open_tag = on

Finalmente, reinicie su servidor Apache

Rajput orante
fuente
0

Para habilitar short_open_tag para un dominio particular con php-fpm, debe editar:

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

Donde xxxxx es el número de socket del dominio.

Y agregue: php_value [short_open_tag] = On

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

Eso funciona en php7.2 en ubuntu 16, la misma respuesta que Bradley Flood, aunque el directorio en el que se almacena el archivo de configuración ha cambiado.

También puede cambiar la versión en la cadena php para que coincida con su versión instalada actualmente.

Raymie
fuente
-1
 short_open_tag = On

en php.ini Y reiniciar el servidor Apache.

Muhibbullah Muhi
fuente
-2

Cambié el short_open_tag de Off a On en mi instancia de aws centos 7 y php7 (PHP 7.0.33 (cli) (construido: 6 de diciembre de 2018 22:30:44) (NTS)), pero no refleja la página de información de php Y el código. Así que remito muchos documentos y encuentro una solución para mi caso. Agregue una línea adicional después de short_open_tag como asp_tags = Encendido después de reiniciar Apache Funciona en el código y voy a la salida correctamente

archivo 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
fuente
-5

Ajuste el asp_tags = Ony short_open_tag = Onen ambas los archivos \apache\Apache2.2.21\bin\php.iniy \bin\php\php5.3.8\php.ini a continuación, reinicie el servidor Apache.

kal
fuente
66
asp_tags? ¿Para qué?
Su sentido común
1
asp es muy probablemente un error tipográfico. ¿Por qué la comunidad no puede mostrar un poco de piedad por @kal?
n8bar