Как определить, какой блок вызывает ошибки PHP?
Я очищаю сайт Drupal 7, и в настоящее время он выдает кучу синтаксических ошибок PHP, указывающих на какой-то блок, который его вызывает. В нем не указано, какой блок, а только говорится об ошибке php_eval(). Так что я предполагаю, что он где-то в квартале.
Как бы найти виновника того, какой блок является причиной этой ошибки php?
2 answers
Похоже, что это ошибка в php-коде в некоторых блоках. Нет прямого способа выяснить, какой блок вызывает ошибку. Но вы можете найти идентификаторы блоков внутри этой страницы, которая содержит php-код, добавив следующий патч внутри modules/block/block.module, просто для отладки.
diff --git a/modules/block/block.module b/modules/block/block.module
index 48c80d7..d25a497 100644
--- a/modules/block/block.module
+++ b/modules/block/block.module
@@ -243,6 +243,9 @@ function block_block_view($delta = '') {
$block = db_query('SELECT body, format FROM {block_custom} WHERE bid = :bid',
$data['subject'] = NULL;
$data['content'] = check_markup($block->body, $block->format, '', TRUE);
+ if (strpos($block->format, 'php')) {
+ echo "<pre>"; print_r($delta, TRUE); echo "</pre>";
+ }
return $data;
}
РЕДАКТИРОВАТЬ: Пожалуйста, обратите внимание, что приведенный выше код предназначен только для отладки и не предназначен для ввода. Как сказал Молот в комментарии, Никогда не взламывайте ядро
Наиболее вероятной причиной ошибки является отсутствие или несоответствие скобок в PHP-коде, который вы используете в своих пользовательских блоках или функциях. Чтобы устранить ошибку с отсутствующими скобками в блоках PHP или в других областях, код необходимо проверить с самого начала, чтобы найти его. Но проверить весь PHP-код действительно сложно. Один из способов избежать ошибок - использовать правильные отступы в коде. Как только все скобки в коде будут установлены правильно, ошибка синтаксического анализа: синтаксическая ошибка, неожиданный конец $ будет исправлен.
Что вызывает эту ошибку?
На самом деле эта ошибка означает, что PHP завершил анализ вашего кода, но вы забыли закрыть символ где-то на своей странице или в тех, которые были включены. Причин может быть несколько:
- Эта проблема может возникнуть, если кто-то где-то использовал
<?
вместо<?php
, ноphp.ini
вашего сервера отключает короткие открытые теги. Проверьте эту строку в своемphp.ini
- "short_open_tag = On
". - Ты забыл закройте кавычку, поэтому PHP продолжает анализировать ваш код, пока не найдет закрывающую кавычку.
- Вы забыли закрыть скобку, поэтому с последнего открытия PHP рассматривает весь следующий код как часть блока, который никогда не заканчивается.
- Вы забыли закрыть скобку, поэтому с последней открытой скобки PHP рассматривает весь следующий код как часть определенного блока (условие, аргументы функций и т.д.), который не заканчивается.
- Вы забыли запятую, поэтому для PHP в вашем коде есть инструкция, у которой нет конца.
ПРИМЕЧАНИЕ: Это означает, что проблема может быть не в строке, указанной в сообщении об ошибке, так как отсутствующий символ может быть где угодно после этой точки.