PHPCS не работает в командной строке?

Когда я набираю phpcs --version, вместо того, чтобы получить номер версии, я получаю что-то вроде этого:

/Applications/drupal/php/bin/phpcs: line 2: ?php: No such file or directory
/Applications/drupal/php/bin/phpcs: line 3: /Applications: is a directory
/Applications/drupal/php/bin/phpcs: line 4: Applications: command not found
/Applications/drupal/php/bin/phpcs: line 5: Applications: command not found
/Applications/drupal/php/bin/phpcs: line 6: Applications: command not found
/Applications/drupal/php/bin/phpcs: line 7: Applications: command not found
/Applications/drupal/php/bin/phpcs: line 8: Applications: command not found
/Applications/drupal/php/bin/phpcs: line 9: Applications: command not found
/Applications/drupal/php/bin/phpcs: line 10: Applications: command not found
/Applications/drupal/php/bin/phpcs: line 11: syntax error near unexpected token `newline'
/Applications/drupal/php/bin/phpcs: line 11: ` * @author    Greg Sherwood <gsherwood@squiz.net>'

Похоже, что он не читает PHP правильно. Что я неправильно настроил?

Все, что я сделал, это установил PHP_CodeSniffer. Когда я запускаю его снова, я получаю:

pear / PHP_CodeSniffer уже установлен и совпадает с выпущенной версией 1.3.5

2 ответа

Решение

Когда PEAR выполняет установку PHP_CodeSniffer, он меняет первую строку в основном скрипте phpcs так, чтобы #! строка указывает на исполняемый файл PHP в вашей системе.

Поэтому перед установкой строка выглядит так: #!@php_bin@ и после установки это будет выглядеть примерно так (в зависимости от того, где установлен PHP): #!/usr/bin/php

У PEAR есть параметр конфигурации, который сообщает, где установлен этот исполняемый файл PHP. Вы можете увидеть это значение, запустив pear config-show и ищет ценность PHP CLI/CGI binary (php_bin), Вы должны убедиться, что это значение фактически является местоположением PHP в вашей системе, иначе все установки скриптов (например, PHPUnit) будут иметь аналогичную проблему.

Лучший способ проверить это значение - запустить which php и установите это значение для переменной конфигурации PEAR. Затем переустановите PHP_CodeSniffer, чтобы замена была выполнена снова.

Так что для моей системы я бы сделал это:

$ which php
/usr/bin/php
$ sudo pear config-set php_bin /usr/bin/php
config-set succeeded
$ sudo pear uninstall php_codesniffer
uninstall ok: channel://pear.php.net/PHP_CodeSniffer-1.3.5
$ sudo pear install php_codesniffer
downloading PHP_CodeSniffer-1.3.5.tgz ...
Starting to download PHP_CodeSniffer-1.3.5.tgz (345,113 bytes)
......................................................................done: 345,113 bytes
install ok: channel://pear.php.net/PHP_CodeSniffer-1.3.5

Если все идет хорошо, вы должны увидеть правильный #! строка в вашем новом файле phpcs:

$ which phpcs
/usr/local/bin/phpcs
$ head -n 1 /usr/local/bin/phpcs
#!/usr/bin/php

Если это выглядит правильно, вы сможете без проблем запустить команду phpcs.

Некоторое время я боролся с этим, но, наконец, понял: если команда PHP, которую вы вызываете напрямую, является оболочкой сценария оболочки вокруг реального исполняемого файла, вам нужно отредактировать первую строку сценария phpcs, чтобы вызвать PHP через / usr / bin / env:

#!/usr/bin/env /Applications/acquia-drupal/php5_3/bin/php

или просто

#!/usr/bin/env php

Полный контекст для поисковиков - до исправления:

~$ head -n 1 pear/bin/phpcs 
#!/Applications/acquia-drupal/php5_3/bin/php
~$ phpcs --version
/Users/mryan/pear/bin/phpcs: line 2: ?php: No such file or directory
/Users/mryan/pear/bin/phpcs: line 3: /Applications: is a directory
/Users/mryan/pear/bin/phpcs: line 4: Desktop: command not found
/Users/mryan/pear/bin/phpcs: line 5: Desktop: command not found
/Users/mryan/pear/bin/phpcs: line 6: Desktop: command not found
/Users/mryan/pear/bin/phpcs: line 7: Desktop: command not found
/Users/mryan/pear/bin/phpcs: line 8: Desktop: command not found
/Users/mryan/pear/bin/phpcs: line 9: Desktop: command not found
/Users/mryan/pear/bin/phpcs: line 10: Desktop: command not found
/Users/mryan/pear/bin/phpcs: line 11: syntax error near unexpected token `newline'
/Users/mryan/pear/bin/phpcs: line 11: ` * @author    Greg Sherwood <gsherwood@squiz.net>'
~$ /Applications/acquia-drupal/php5_3/bin/php pear/bin/phpcs --version
PHP_CodeSniffer version 1.4.5 (stable) by Squiz Pty Ltd. (http://www.squiz.com.au)

После исправления:

~$ head -n 1 pear/bin/phpcs
#!/usr/bin/env php
~$ phpcs --version
PHP_CodeSniffer version 1.4.5 (stable) by Squiz Pty Ltd. (http://www.squiz.com.au)

И теперь я могу настроить CodeSniffer в PhpStorm.

Другие вопросы по тегам