Проверка синтаксиса PHP с помощью lint и как это сделать в строке, а не в файле
во-первых, я запутался в том, как запустить PHP в командной строке. Я читал несколько статей в интернете, и все они говорят, что вам нужен CLI (интерфейс командной строки).
в принципе, у меня есть файлы PHP, и я хочу вызвать что-то вроде этого:
php -l somefile.php
но я хочу проверить строка, а не файл! Как это сделать? Может с помощью STDIN, STDOUT или STDERR помочь с этим вообще?
если да, то как? Может ли кто-нибудь привести пример здесь?
кроме того, где я могу разместить это выше кода? У меня нет доступа к командной строке (я не думаю), или я просто помещаю ее в сам файл PHP, который будет работать? Будет ли он выполнять этот код в этом случае в командной строке?
Я совершенно не знаю, как работает эта командная строка PHP... Кто-нибудь может помочь пролить свет на это?
3 ответов
Если вы хотите код lint (не в файле), единственный вариант-написать оболочку.
предполагая, что ваш $HOME / bin предшествует /usr/bin, вы можете установить свою оболочку в $HOME/bin / php, которая имеет другую опцию для компоновки командной строки. Обертка создаст временный файл, поместит туда код, запустите /usr/bin/php -l file
а затем удалите временный файл.
HTH.
вы можете проверить код php -l
от STDIN по трубопроводу. Пример:
$ echo "<?php echo 'hello world'" | php -l
Parse error: syntax error, unexpected end of file, expecting ',' or ';' in - on line 2
Errors parsing -
здесь точка с запятой ;
отсутствует после строки с одной кавычкой. Если вы добавите его, ошибка исчезнет, и PHP скажет вам так:
$ echo "<?php echo 'hello world';" | php -l
No syntax errors detected in -
тире -
на Errors parsing -
или No syntax errors detected in -
означает STDIN. Он обычно используется для этого.
другой способ-написать код, который вы хотите создать самостоятельно (или скопировать и вставить его). Это работает с помощью ворсинок переключитесь с --
, вводя код и заканчивая его вводом Ctrl + D (Linux)/Ctrl + Z (Win) на собственной линии:
$ php -l --
<?php echo "1"
^Z
Parse error: syntax error, unexpected end of file, expecting ',' or ';' in - on line 2
Errors parsing -
кстати,-r
переключатель, который обычно предназначен для предоставления кода для выполнения, в этом случае не работает, и он дает ошибку:
$ php -l -r "echo 1"
Either execute direct code, process stdin or use a file.
скорее всего потому, что он предназначен для выполнения кода, и это его, без пылеобразования. Также это без открытия PHP метка.
из всех этих вариантов первый имеет, вероятно, наибольший смысл, если вы хотите передать его (вы также можете работать с proc_open
в случае, если вам нужно больше контроля). Вот краткий пример использования PHP exec
:
<?php
/**
* PHP Syntax Checking with lint and how to do this on a string, NOT a FILE
*
* @link http://stackoverflow.com/q/12152765/367456
* @author hakre
*/
$code = "<?php echo 'hello world'";
$result = exec(sprintf('echo %s | php -l', escapeshellarg($code)), $output, $exit);
printf("Parsing the code resulted in; %s\n", $result);
echo "The whole output is:\n";
print_r($output);
вывод выглядит следующим образом:
Parsing the code resulted in; Errors parsing -
The whole output is:
Array
(
[0] =>
[1] => Parse error: syntax error, unexpected '"', expecting ',' or ';' in - on line 1
[2] => Errors parsing -
)
Я бы предложил проверить phpstan. Это Линтер, построенный на PHP, и работает очень похоже на phpunit, но для кода линтинга. Вы можете писать конфигурации, управлять уровнями компоновки и включать/игнорировать папки.
Он также имеет правильные коды выхода.
https://github.com/phpstan/phpstan
Если это невозможно, я использовал этот скрипт здесь и он отлично работает.