Как добавить shebang #! с PHP скрипт на linux?

У меня есть небольшая проблема с добавлением shebang #! с моим php script на RedHat linux. У меня есть небольшая часть тестового кода с добавлением shebang (я также пробовал разные варианты), но каждый раз, когда я пытаюсь запустить script, я получаю следующее сообщение об ошибке.

Ошибка msg:

-bash: script.php: command not found

Тест script:

#!/bin/env php    
<?php echo "test"; ?>

Шебанг #! Варианты:

#!/usr/bin/php
#!/usr/bin/env php

Ответ 1

Он должен (для большинства систем) быть #!/usr/bin/env php, но ваша ошибка не связана с этим.

-bash: script.php: command not found

В нем говорится, что script.php не найден.

Если проблема была в строке shebang, тогда ошибка произносила бы что-то вроде:

bash: script.php: /usr/env: bad interpreter: No such file or directory

Предположительно, вы печатаете script.php, и файл не находится в каталоге вашего $PATH или не является исполняемым.

  • Сделайте его исполняемым: chmod +x script.php.
  • Введите путь к нему вместо имени файла, если он находится в текущем каталоге, а затем: ./script.php.

Вместо 2 вы можете переместить/скопировать/сопоставить файл где-то, указанному в $PATH или изменить $PATH, чтобы включить каталог, содержащий script.

Ответ 2

Если script не находится в вашем /usr/local/bin и является исполняемым, вы должны префикс, называя ваш script php следующим образом:

php myscrip.php

Для shebangs, вот что я использую:

Вот так:

#!/usr/bin/php

или это:

#!/usr/bin/env php

Ответ 3

Оставив здесь несколько небольших заметок:


Использовать бинарный файл php, расположенный внутри той же папки.

Например, исполняемый файл php7.2, скопированный из /usr/bin, находится по тому же пути, что и скрипт hello.

#!./php7.2
<?php

echo "Hello!"; 

Чтобы запустить его:

./hello

Которые ведут себя так же, как:

./php7.2 hello

Это обеспечивает переносимость, но остерегайтесь системных архитектур, бинарный файл php может не соответствовать целевой платформе.


Установка разрешенной памяти из hashbang:

Мы можем установить одну запись INI из строки hashbang:

#!/usr/bin/php -d memory_limit=2048M
<?php
phpinfo();
exit;

Затем посмотрите, понял ли php, используя phpinfo():

./myphpProg | grep memory

Правильный вывод оболочки должен содержать:

memory_limit => 2048M => 2048M

Выполнение вышеизложенного аналогично следующей командной строке:

php -d memory_limit=2048M myphpProg.**php**

Именно поэтому мы можем установить только одно значение ini в hashbangs, так как php принимает только один параметр -d за раз.