![«php -f» не запускает код, а только показывает содержимое файла](https://rvso.com/image/1592548/%C2%ABphp%20-f%C2%BB%20%D0%BD%D0%B5%20%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA%D0%B0%D0%B5%D1%82%20%D0%BA%D0%BE%D0%B4%2C%20%D0%B0%20%D1%82%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE%20%D0%BF%D0%BE%D0%BA%D0%B0%D0%B7%D1%8B%D0%B2%D0%B0%D0%B5%D1%82%20%D1%81%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B8%D0%BC%D0%BE%D0%B5%20%D1%84%D0%B0%D0%B9%D0%BB%D0%B0.png)
Запуск 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.