Как добавить 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 за раз.