Como habilitar tags curtas do PHP?

324

Eu tenho um aplicativo da web em um servidor Linux que começa com <?

Eu precisava copiar esse aplicativo para um ambiente Windows e tudo está funcionando bem, exceto que uma instrução SQL está sendo renderizada de maneira diferente. Eu não sei se isso tem a ver com o script que começa com em <?phpvez de <?porque não sei de onde habilitar <?o, PHP.inientão mudei para<?php

Eu sei que essas duas instruções devem ter o mesmo significado, mas preciso testá-las <?para garantir que o aplicativo seja exatamente o mesmo. Dessa forma, posso eliminar outra possibilidade.

obrigado

semente
fonte

Respostas:

559

Conjunto

short_open_tag=On

no php.ini

E reinicie o servidor Apache.

codaddict
fonte
54
Se o PHP for executado como módulo Apache, você também poderá configurá-lo em um arquivo .htaccess: php_flag short_open_tag on
Álvaro González
12
Mais lileky dentro/etc/php5/apache2/php.ini
Benjamin Crouzier 04/04
@pinouchon, seedeg escreveu que ele se move para o Windows, mas seu comentário me ajude :)
Linha
7
Use php --inipara localizar o arquivo de configuração carregado (Arquivo de configuração carregado: /etc/php5/cli/php.ini)
Wietse
Se você estiver usando o xampp no ​​Windows, abra o painel de controle do XAMPP, clique no botão CONFIG e vá para a opção PHP (php.ini).
Praful Rajput
80

Isso pode ser feito ativando short_open_tag no php.ini :

short_open_tag = on

Se você não tiver acesso ao php.ini, tente habilitá-los através do arquivo .htaccess, mas é possível que a empresa de hospedagem o desative se estiver em uma hospedagem compartilhada:

php_value short_open_tag 1

Para as pessoas que pensam que short_open_tags são más práticas a partir do php 5.4, o <?= ... ?>shorttag será suportado em todos os lugares , independentemente das configurações, portanto não há razão para não usá-las se você puder controlar as configurações no servidor. Também foi dito neste link: short_open_tag

RJD22
fonte
5
Tags abertas curtas não são necessariamente uma prática ruim (estou tentando manter a mente aberta aqui), mas apenas porque Rasmus et al. decidiu fornecer suporte padrão para eles no PHP5.4 não fornece justificativa para usá-los. Usá-los pode criar uma dependência indesejável posteriormente ou causar confusão com XML. Alguns boa discussão aqui: stackoverflow.com/questions/200640/...
Ian Lewis
1
Ian. Não estamos falando sobre a <? echo $var ?>marca aberta curta, mas a <?= $var ?>marca aberta curta. O XML do Afaik não deve ser afetado.
RJD22
Temos um teste de codificação PHP e, ocasionalmente, recebemos envios onde a tag curta <? = Foi usada. Infelizmente, a suposição de que esse estilo está sendo usado em todos os lugares é um pouco ingênua e geralmente vem de desenvolvedores criados com uma dieta de ASP. Claramente, está disponível, mas seu uso é uma micro-otimização e falhará por motivos de portabilidade, o que é uma pena.
11133 Ian Lewis
6
@IanLewis Eu não concordo. A tag curta do PHP não tem nada a ver com o ASP. A melhor razão pela qual você gostaria de usar <?= é para modelagem e acho que é bastante válida. Outras linguagens de modelos, como o bigode, também usam tags curtas e simples {{var}}. O PHP é frequentemente usado como uma linguagem de modelagem e ter que fazer <?php echo $var ?>é muito mais feio do que o <?=$var?>HTML embutido.
RJD22
É um debate interessante e se torna altamente subjetivo. Não acredito que código bonito seja necessariamente melhor que código que mostra um pouco da feiura inerente. Minha opinião aqui é que a versão <? = $ Var?> Parece muito mais cheia e muito menos legível que a versão mais aberta, mas mais longa. O link com o ASP deve ser uma percepção comum, pois vários desenvolvedores que conheço criam o mesmo link sem avisar.
Ian Lewis
19

Isso pode ser feito ativando short_open_tag no php.ini:

1.Para localizar o arquivo php.ini, na linha de comentário, execute

 php --ini

você terá algo assim,

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

Consulte a segunda linha da saída do comentário. O arquivo estará no caminho mencionado.

2. Abra o arquivo php.ini e encontre short_open_tag. Por padrão, está em offalterá-lo para on.

3.Reinicie o servidor, execute este comentário

service httpd restart

obrigado

user2086641
fonte
18

Para definir tags curtas para abrir a partir de um script de instalação do Vagrant no Ubuntu:

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

Eu posso ver que todas as respostas acima estão apenas parcialmente corretas. Na realidade, todos os aplicativos PHP do século XXI terão o FastCGI Process Manager (php-fpm), portanto, depois de adicionar php-info () ao script test.php e verificar o caminho correto para o php.ini

Go to php.ini and set short_open_tag = On

IMPORTANTE: você deve reiniciar o processo php-fpm para que isso funcione!

sudo service php-fpm restart

e, finalmente, reinicie o servidor nginx / http

sudo service nginx restart
Eddy Ferreira
fonte
2
No meu caso: sudo serviço php7.0-fpm restart
Sampath Perera
sudo serviço php-fpm restart vai trabalhar para qualquer versão padrão do PHP você tem instalar em seu caixa, a menos que você tem várias versões, caso em que você deve especificar a versão que você está se referindo
Eddy Ferreira
1
Reiniciar o nginx apenas não funcionou para mim. De fato, a função phpini () continuou mostrando short_open_tag como Off. Acabei de reiniciar o servidor e funcionou. Tipo de drástica, mas ainda mais rápido do que a pesquisa porquê ...
Fran Marzoa
10

você precisa ativar short_open_tags.

short_open_tag = On
Jage
fonte
10

Tão simples como isso, siga as seguintes etapas:

  1. Ir para o php.iniarquivo
  2. Localize short_open_tage defina-o comoon

    short_open_tag = On
  3. Reinicie o servidor

Suresh KUMAR Mukhiya
fonte
9

No CentOS 6 (testado no Centos 7 também), você não pode definir short_open_tag em /etc/php.ini para php-fpm. Você terá um erro:

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

Você deve editar a configuração do seu site, que pode ser encontrada em /etc/php-fpm.d/www.conf E escrever no final do arquivo:

php_value[short_open_tag] =  On
XakRu
fonte
Tive que fazer isso em uma Debian Jessie. Isso pode se aplicar a todas as instalações do PHP5-FPM, na verdade.
Bertrand
7

Se você estiver usando Ubuntucom Apache+php5, nas versões atuais existem 2 locais onde você precisa mudar parashort_open_tag = On

  1. /etc/php5/apache2/php.ini - isto é para as páginas carregadas através do seu servidor web (Apache)
  2. /etc/php5/cli/php.ini- essa configuração é usada quando você inicia seus arquivos php a partir da linha de comando, como: php yourscript.php- isso vale para arquivos php executados manualmente ou pelo cronjob diretamente no servidor.
Vladas Freimanas
fonte
6

se você editar seu arquivo php.ini, lembre-se de reiniciar o serviço (apache2, etc) para que as edições no php.ini entrem em vigor

Steve Wasiura
fonte
5

Para os usuários do Wamp Server, existe uma maneira mais fácil: você pode ativar essa configuração clicando com o botão esquerdo do mouse uma vez no ícone WampServer, escolha PHP -> Configurações do PHP -> pequena marca aberta. Espere um segundo, o WampServer irá reiniciar automaticamente o seu PHP e também o seu serviço web.

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

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

se estiver usando o xampp, você notará que o arquivo php.ini mencionou duas vezes short_open_tag. Ative o segundo para short_open_tag = On. O primeiro é comentado e você pode ser tentado a descomentar e editá-lo, mas é substituído por um segundo short_open_tag

Roger Gajraj
fonte
1

Se você estiver usando o xampp no ​​Windows, faça o seguinte

  1. Abra o painel de controle do XAMPP.
  2. Clique no botão CONFIG.
  3. Vá para a opção PHP (php.ini).

Encontre short_open_tag usando o utilitário ctrl + f

Você vai encontrar ;short_open_tag

remova gentilmente o ponto-e-vírgula (;) da linha.

e mantenha-o como short_open_tag = on

Por fim, reinicie o servidor Apache

Praful Rajput
fonte
0

Para habilitar short_open_tag para um domínio específico com php-fpm, você deve editar:

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

Onde xxxxx é o número do soquete do domínio.

E adicione: php_value [short_open_tag] = Ativado

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

Isso funciona no php7.2 no ubuntu 16, a mesma resposta de Bradley Flood, embora o diretório em que o arquivo de configuração está armazenado tenha mudado.

Além disso, você pode alterar a versão na string php para corresponder à sua versão atualmente instalada.

Raymie
fonte
-1
 short_open_tag = On

em php.ini E reinicie o servidor Apache.

Muhibbullah Muhi
fonte
-2

Alterei o short_open_tag para Off na minha instância do aws centos 7 e no php7 (PHP 7.0.33 (cli) (compilado em 6 de dezembro de 2018 22:30:44) (NTS)), mas não reflete a página de informações do php e o código Por isso, refiro-me a maio de documentos e encontre uma solução no meu caso. Adicione uma linha extra após o short_open_tag como asp_tags = Ligado após o reinício do Apache Funciona no código e eu saio corretamente

arquivo 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
fonte
-5

Defina o asp_tags = One short_open_tag = Onem ambos os arquivos \apache\Apache2.2.21\bin\php.inie \bin\php\php5.3.8\php.ini em seguida, reinicie o servidor Apache.

kal
fonte
6
asp_tags? Pelo que?
Seu senso comum
1
asp é provavelmente um erro de digitação. Por que a comunidade não mostra apenas um pouco de misericórdia pelo @kal?
N8bar 7/04