Многократная ошибка PHP CodeSniffer

Я совершенно сбит с толку тем, что происходит не так. У меня была версия моего кода, которая успешно работала, и после внесения незначительных изменений в добавление ; в конец моих операторов endforeach и endif (чтобы сделать его совместимым с php 5.2) я получил массу ошибок. Однако все они имеют одну и ту же ошибку:

09-Jul-2015 07:47:26 US/Pacific] PHP Notice:  Undefined index:  in /Applications/MAMP/bin/php/php5.6.2/lib/php/PHP/CodeSniffer/File.php on line 3476
[09-Jul-2015 07:47:26 US/Pacific] PHP Stack trace:
[09-Jul-2015 07:47:26 US/Pacific] PHP   1. {main}() /Applications/MAMP/bin/php/php5.6.2/bin/phpcs:0
[09-Jul-2015 07:47:26 US/Pacific] PHP   2. PHP_CodeSniffer_CLI->runphpcs() /Applications/MAMP/bin/php/php5.6.2/bin/phpcs:25
[09-Jul-2015 07:47:26 US/Pacific] PHP   3. PHP_CodeSniffer_CLI->process() /Applications/MAMP/bin/php/php5.6.2/lib/php/PHP/CodeSniffer/CLI.php:95
[09-Jul-2015 07:47:26 US/Pacific] PHP   4. PHP_CodeSniffer->processFiles() /Applications/MAMP/bin/php/php5.6.2/lib/php/PHP/CodeSniffer/CLI.php:867
[09-Jul-2015 07:47:26 US/Pacific] PHP   5. PHP_CodeSniffer->processFile() /Applications/MAMP/bin/php/php5.6.2/lib/php/PHP/CodeSniffer.php:619
[09-Jul-2015 07:47:26 US/Pacific] PHP   6. PHP_CodeSniffer->_processFile() /Applications/MAMP/bin/php/php5.6.2/lib/php/PHP/CodeSniffer.php:1679
[09-Jul-2015 07:47:26 US/Pacific] PHP   7. PHP_CodeSniffer_File->start() /Applications/MAMP/bin/php/php5.6.2/lib/php/PHP/CodeSniffer.php:1801
[09-Jul-2015 07:47:26 US/Pacific] PHP   8. Generic_Sniffs_WhiteSpace_ScopeIndentSniff->process() /Applications/MAMP/bin/php/php5.6.2/lib/php/PHP/CodeSniffer/File.php:567

Это дает мне эту ошибку около 200 раз каждый раз, когда я запускаю код. Я использую Sublime Text 3 с установленным phpcs. Я попытался удалить phpcs, а также удалить его из папки php, но, похоже, это никак не влияет на него.

У кого-нибудь есть опыт в этом? Любая идея, что может быть причиной этого?

ОТРЕДАКТИРОВАНО:

С тех пор я удалил пакет сниффера кода из Sublime Text 3, а также удалил папку CodeSniffer, на которую ссылается сообщение об ошибке, и я все еще получаю то же самое сообщение об ошибке.


person jldavis76    schedule 09.07.2015    source источник
comment
Я не могу ответить на вопрос, но я хотел бы подвергнуть сомнению внесение изменений в ваш код, чтобы сделать его совместимым с PHP 5.2. 5.2 не поддерживается более четырех с половиной лет, и в результате он пронизан дырами в безопасности. Вы не должны использовать его, и вы также не должны поощрять других использовать его.   -  person Simba    schedule 09.07.2015
comment
Кстати, какая у вас версия phpCS?   -  person Simba    schedule 09.07.2015


Ответы (2)


Вы явно столкнулись с ошибкой в ​​phpCS, поэтому, вероятно, об этом следует сообщить на их странице проблем github. См. https://github.com/squizlabs/PHP_CodeSniffer/issues. Вам нужно будет предоставить как можно меньший образец кода, который может надежно воспроизвести проблему.

Ошибка, конечно же, просто «уведомление», поэтому PHP с радостью продолжает работу программы phpCS после ее возникновения. Это может быть или не быть хорошей вещью. В некоторых случаях, когда возникают проблемы такого рода, могут возникнуть серьезные проблемы в дальнейшей программе, тогда как в других это не имеет никакого значения. Мне нелегко определить, на какую сторону забора падает этот конкретный случай, не проведя глубокого анализа кодовой базы phpCS (на что у меня, к сожалению, нет времени).

Однако беглый взгляд на код File.php показывает, что ошибка возникает в функции findFirstOnLine() и может быть вызвана тем, что один из ее параметров ($start) передается пустым, в то время как ожидается получение целого числа.

Трудно быть в этом уверенным, не видя, что проблема возникает у меня, но если это проблема, то быстрое решение будет состоять в том, чтобы добавить строку в начале этой функции, говорящую что-то вроде

$start = (int)$start;

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

Однако тот факт, что параметр передается с неожиданным значением, может указывать на более глубокую ошибку в другом месте phpCS, поэтому я бы посоветовал провести дополнительный анализ, прежде чем просто продолжить описанное выше.

Но в конце концов, я бы повторил комментарий, который я сделал ранее. Это происходит потому, что вы сделали свой код совместимым с PHP5.2. Я бы очень настоятельно посоветовал вам еще раз подумать, действительно ли вам нужно это делать. Нет никаких причин, по которым кто-либо должен использовать PHP5.2 сегодня: он не поддерживается и не имеет исправлений безопасности почти полвека. И если вы используете его, то это, вероятно, означает, что вы также используете неподдерживаемую версию ОС, поскольку она просто недоступна ни для одной из последних версий ОС, а это означает, что у вас есть еще куча проблем с безопасностью. Пожалуйста, не используйте его, и, пожалуйста, не поощряйте других использовать его.

person Simba    schedule 09.07.2015
comment
Спасибо за помощь, и совет! - person jldavis76; 09.07.2015

Undefined index: обычно означает, что вы пытаетесь получить доступ к элементу массива по его ключу (его «индексу»), а ключ в массиве не существует.

$array = array(
  'a' => 'apple',
  'c' => 'cat',
);
var_dump($array['c']); //cat
var_dump($array['b']); //null
// and notice: Undefined index: b in ...

Что интересно в вашем коде, так это то, что он не говорит вам, что такое индекс.

person Richard Parnaby-King    schedule 09.07.2015
comment
Это расстраивает. Сообщение об ошибке не дает мне много работы. - person jldavis76; 09.07.2015