«php -f» не запускает код, а только показывает содержимое файла

«php -f» не запускает код, а только показывает содержимое файла

Запуск Debian 9 и PHP 7.3, попытка выполнить файл с php -f hello.phpкомандой. Вместо того, чтобы вывести эхо, helloон выводит исходный код. Полный код:

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

Что я сделал:

  • Подтверждено, что файл имеет разрешения на чтение и выполнение.
  • Подтверждено PHPпритонстрока верна.
  • Подтверждено, что инструменты PHP CLI установлены.

Что не так? Как заставить это работать?

решение1

Когда PHP анализирует файл, он ищет открывающие и закрывающие теги, которые <?phpи ?>которые говорят PHP начать и остановить интерпретацию кода между ними. Разбор таким образом позволяет встраивать PHP во всевозможные документы, так как все, что находится за пределами пары открывающих и закрывающих тегов, игнорируется парсером PHP.

PHP также допускает использование короткого открывающего тега <?(что не рекомендуется, поскольку доступно только в том случае, если оно включено с помощью short_open_tag php.iniдирективы файла конфигурации или если PHP был настроен с этой --enable-short-tagsопцией).

(источник)

Поэтому наиболее надежным решением будет использовать <?phpвместо <?в своем коде.

решение2

Этот «шебэнг» не нужен:

#!/usr/bin/php

Просто создайте свой скрипт следующим образом; обратите внимание, что вам следует добавить phpк открывающему короткому тегу ( <?):

<?php
echo 'hello';
?>

Затем запустите его следующим образом:

php -f hello.php

Или даже просто опустите -fи запустите его так:

php ./hello.php

И тогда вывод будет таким:

hello

Кроме того, когда вы говорите это:

  • Подтверждено, что файл имеет разрешения на чтение и выполнение.

Файлы PHP не должны иметь разрешения на выполнение; только разрешения на чтение, поскольку файл будет прочитан и проанализирован интерпретатором PHP. То же самое касается командной строки, а также интерпретатора PHP модуля Apache.

Связанный контент