“php -f” não executa código, mas apenas mostra o conteúdo do arquivo

“php -f” não executa código, mas apenas mostra o conteúdo do arquivo

Executando Debian 9 e PHP 7.3, tentando executar um arquivo com o php -f hello.phpcomando. Em vez de ecoar, helloele 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 <?phpe ?>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 a short_open_tag php.inidiretiva do arquivo de configuração ou se o PHP tiver sido configurado com a --enable-short-tagsopção).

(fonte)

Portanto, a solução mais confiável é usar <?phpem 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 -fe 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.

informação relacionada