"php -f" no ejecuta código pero solo muestra el contenido del archivo

"php -f" no ejecuta código pero solo muestra el contenido del archivo

Ejecutando Debian 9 y PHP 7.3, intentando ejecutar un archivo con el php -f hello.phpcomando. En lugar de hacer eco hello, genera el código fuente. El código completo es

#!/usr/bin/php
<?
echo 'hello';
?>

Lo que hice:

  • Confirmado que el archivo tiene permisos de lectura y ejecución.
  • Confirmado el PHPel asuntoLa línea es correcta.
  • Confirmado que las herramientas PHP CLI están instaladas.

¿Lo que está mal? ¿Cómo hacer que funcione?

Respuesta1

Cuando PHP analiza un archivo, busca etiquetas de apertura y cierre, que son <?phpy ?>que le indican a PHP que comience y deje de interpretar el código entre ellas. El análisis de esta manera permite que PHP se incruste en todo tipo de documentos diferentes, ya que el analizador PHP ignora todo lo que está fuera de un par de etiquetas de apertura y cierre.

PHP también permite etiquetas abiertas cortas <?(lo cual no se recomienda ya que solo está disponible si se habilita mediante la short_open_tag php.inidirectiva del archivo de configuración, o si PHP se configuró con la --enable-short-tagsopción).

(fuente)

Entonces, la solución más confiable es usar <?phpen lugar de <?en su código.

Respuesta2

Ese “shebang” no es necesario:

#!/usr/bin/php

Simplemente haz tu guión así; tenga en cuenta que debe agregar el phpa la etiqueta corta de apertura ( <?):

<?php
echo 'hello';
?>

Luego ejecútelo así:

php -f hello.php

O simplemente omita el -fy ejecútelo así:

php ./hello.php

Y entonces el resultado sería este:

hello

Además, cuando dices esto:

  • Confirmado que el archivo tiene permisos de lectura y ejecución.

Los archivos PHP no necesitan tener permisos de ejecución; solo permisos de lectura ya que el intérprete PHP leerá y analizará el archivo. Lo mismo ocurre con la línea de comandos y con el intérprete PHP del módulo Apache.

información relacionada