Запуск PHP-скрипта CLI с битом выполнения - PullRequest
2 голосов
/ 02 августа 2011

Это меня слегка беспокоило.

Я знаю, что вы можете сделать

php foo.php

или

php -f foo.php

Нет ли способа просто запустить скрипт сбит выполнения установлен

./foo.php

Учитывая следующее:

#!/usr/bin/php

<?php 
exit('hello');

Я получаю «Не удалось открыть входной файл» или «Неверный интерпретатор: нет такого файла или каталога» в зависимости от того, есть липробел после "bin / php".

Ответы [ 4 ]

7 голосов
/ 02 августа 2011

Вместо #!/usr/bin/php лучше использовать #!/usr/bin/env php. Это будет искать бинарный файл PHP в переменной окружения PATH. Это намного более надежный и кроссплатформенный. Например, BSD устанавливает PHP в /usr/local/bin/php.

Кроме того, вам необходимо убедиться, что это строка first , и что в скрипте установлен исполняемый бит, чтобы установить его для каждого (в целом нормально) использования: chmod a+x script.php

Также убедитесь, что у вас включен CLI SAPI. Выполните команду php -v top verify, она должна показать что-то вроде:

[~]% php -v
PHP 5.3.3 (cli) (built: Jul 22 2010 16:21:30)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
5 голосов
/ 02 августа 2011
  1. Проверьте, нет ли у вас перед '#!', Например, спецификации UTF-8
  2. Проверьте, нет ли у вас ничего в конце строки, например CR (\ r)перед окончательным LF (\ n).CR идет туда, если вы пишете файл в Windows с окончаниями строк Windows (CR LF) и может интерпретироваться как часть пути интерпретатора.
3 голосов
/ 02 августа 2011

Пример кода, который вы дали, кажется нормальным и работает для меня (хотя я добавил закрывающий ?>)

Если вы можете запустить файл с /usr/bin/php foo.php, то происходит что-то странное.Просто дикая догадка, но, возможно, ваш текстовый редактор оставляет BOM (метку порядка байтов) в начале файла, чтобы #! не были первыми двумя байтами в этом файле.(Вы можете узнать, выполнив hexdump -C foo.php | head)

2 голосов
/ 02 августа 2011

Из справочной страницы php(1):

TIPS

Вы можете использовать строку shebang для автоматического вызова php из скрипты. Только CLI-версия PHP будет игнорировать такую ​​первую строку, как показано ниже:

#!/bin/php
<?php
// your script
?>

Итак, метод Шебанга работает. Я получаю ": Нет такого файла или каталога", если я устанавливаю окончания строк в Vim чем-то отличным от "unix" Используете ли вы окончания строки DOS в вашем скрипте?

...