Как определить, какой блок вызывает ошибки PHP?


Я очищаю сайт Drupal 7, и в настоящее время он выдает кучу синтаксических ошибок PHP, указывающих на какой-то блок, который его вызывает. В нем не указано, какой блок, а только говорится об ошибке php_eval(). Так что я предполагаю, что он где-то в квартале.

Как бы найти виновника того, какой блок является причиной этой ошибки php?

Http://i.imgur.com/KJk1jr4.png

enter image description here

Author: kiamlaluno, 2015-09-03

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;
 }

РЕДАКТИРОВАТЬ: Пожалуйста, обратите внимание, что приведенный выше код предназначен только для отладки и не предназначен для ввода. Как сказал Молот в комментарии, Никогда не взламывайте ядро

 1
Author: Alfred Paul, 2015-09-03 11:00:27

Наиболее вероятной причиной ошибки является отсутствие или несоответствие скобок в PHP-коде, который вы используете в своих пользовательских блоках или функциях. Чтобы устранить ошибку с отсутствующими скобками в блоках PHP или в других областях, код необходимо проверить с самого начала, чтобы найти его. Но проверить весь PHP-код действительно сложно. Один из способов избежать ошибок - использовать правильные отступы в коде. Как только все скобки в коде будут установлены правильно, ошибка синтаксического анализа: синтаксическая ошибка, неожиданный конец $ будет исправлен.

Что вызывает эту ошибку?

На самом деле эта ошибка означает, что PHP завершил анализ вашего кода, но вы забыли закрыть символ где-то на своей странице или в тех, которые были включены. Причин может быть несколько:

  1. Эта проблема может возникнуть, если кто-то где-то использовал <? вместо <?php, но php.ini вашего сервера отключает короткие открытые теги. Проверьте эту строку в своем php.ini - "short_open_tag = On".
  2. Ты забыл закройте кавычку, поэтому PHP продолжает анализировать ваш код, пока не найдет закрывающую кавычку.
  3. Вы забыли закрыть скобку, поэтому с последнего открытия PHP рассматривает весь следующий код как часть блока, который никогда не заканчивается.
  4. Вы забыли закрыть скобку, поэтому с последней открытой скобки PHP рассматривает весь следующий код как часть определенного блока (условие, аргументы функций и т.д.), который не заканчивается.
  5. Вы забыли запятую, поэтому для PHP в вашем коде есть инструкция, у которой нет конца.

ПРИМЕЧАНИЕ: Это означает, что проблема может быть не в строке, указанной в сообщении об ошибке, так как отсутствующий символ может быть где угодно после этой точки.

 3
Author: WaQaR Ali, 2015-09-03 13:00:36