![“php -f” não executa código, mas apenas mostra o conteúdo do arquivo](https://rvso.com/image/1592548/%E2%80%9Cphp%20-f%E2%80%9D%20n%C3%A3o%20executa%20c%C3%B3digo%2C%20mas%20apenas%20mostra%20o%20conte%C3%BAdo%20do%20arquivo.png)
Executando Debian 9 e PHP 7.3, tentando executar um arquivo com o php -f hello.php
comando. Em vez de ecoar, hello
ele gera o código-fonte. O código completo é
#!/usr/bin/php
<?
echo 'hello';
?>
O que eu fiz:
- Confirmado que o arquivo tem permissões de leitura e execução.
- Confirmado o PHPShebanglinha está correta.
- Confirmado que as ferramentas PHP CLI estão instaladas.
O que está errado? Como fazer dar certo?
Responder1
Quando o PHP analisa um arquivo, ele procura tags de abertura e fechamento, quais são
<?php
e?>
quais dizem ao PHP para iniciar e parar de interpretar o código entre elas. A análise dessa maneira permite que o PHP seja incorporado em todos os tipos de documentos diferentes, já que tudo fora de um par de tags de abertura e fechamento é ignorado pelo analisador PHP.O PHP também permite tags de abertura curtas
<?
(o que é desencorajado, pois só estará disponível se habilitado usando ashort_open_tag
php.ini
diretiva do arquivo de configuração ou se o PHP tiver sido configurado com a--enable-short-tags
opção).
(fonte)
Portanto, a solução mais confiável é usar <?php
em vez de <?
no seu código.
Responder2
Esse “shebang” não é necessário:
#!/usr/bin/php
Basta fazer o seu script assim; observe que você deve adicionar php
à tag curta de abertura ( <?
):
<?php
echo 'hello';
?>
Então execute assim:
php -f hello.php
Ou simplesmente deixe de fora -f
e execute assim:
php ./hello.php
E então a saída seria esta:
hello
Além disso, quando você diz isso:
- Confirmado que o arquivo tem permissões de leitura e execução.
Os arquivos PHP não precisam ter permissões de execução; apenas permissões de leitura, pois o arquivo será lido e analisado pelo interpretador PHP. O mesmo para a linha de comando e também para o interpretador PHP do módulo Apache.