2013-09-16 4 views
1

После запуска обновления drush на моем сайте drupal 7 PHP-код, который я использую для ввода информации о пользователе для формы, выполняется дважды. Это проблема, потому что я создал несколько функций в PHP, которые вызываются так, когда он выполняет РНР второй раз, когда он пытается повторно объявить функции и я получаю ошибки как это:Drupal PHP выполняется дважды

PHP Fatal error: Cannot redeclare fooBar() (previously declared in [path_to_drupal7]/modules/php/php.module(80) : eval()'d code:3) in [path_to_drupal7]/modules/php/php.module(80) : eval()'d code on line 4 

Это Безразлично» независимо от того, что называется функцией или что она делает. В этом примере случае это код:

<?php 
function fooBar() { 
    print "foo bar"; 
} 

fooBar(); 
?> 

Это также, кажется, не имеет значения, какой тип контента страницы (я в моем случае мне это нужно, чтобы привести к пользовательской информации в форму).

Почему Drupal выполняет PHP дважды? И что еще более важно, как я могу удержать его от этого?

EDIT: Drupal, кажется, выполняет php один раз для обрезанной версии и один раз для полной версии и один раз для полной версии. Это то, что я ожидаю, когда я просматриваю сообщение. Меня не волнует версия предварительного просмотра, поэтому я был бы рад избавиться от нее. Почему Drupal дважды выполняет код при просмотре страницы? (почему он запускает его для обрезанной версии, когда я действительно просматриваю страницу?)

+0

Какие модули были обновлены? – Clive

+0

Похоже, что ядро ​​drupal обновлено с 7.22 до 7.23. Модуль Views также обновлен. – cjc

ответ

2

Что-то должно быть повторно включено/требуется файл, содержащий эту функцию, или у вас есть эта функция в цикле. Найдите это или оберните его function_exists.

<?php 

if (!function_exists('fooBar')) { 
    function fooBar() { 
     print "foo bar"; 
    } 
} 

fooBar(); 
+0

, который работает как способ заставить все работать, но на самом деле это не решает проблему. Drupal все еще запускает код дважды, и это действительно то, что я хочу предотвратить. Кроме того, 'fooBar()' нужно перемещать внутри оператора if, иначе он будет вызван дважды. – cjc

+0

@cjc, можете ли вы предоставить немного больше информации? Какие модули вы используете? Где называется эта функция? Что должна делать эта функция? – labue

+0

Код выполняется как тело страницы с использованием PHP-кода. Оказывается, 'fooBar()' не обязательно должен находиться внутри оператора if, поскольку первое выполнение выполняется для обрезанного текста, а второе исполнение - для полного текста. – cjc

0

Как вы сказали, РНР вы ввели в качестве входных данных в настоящее время Эвальда дважды .... один раз для тизера и один раз для полного текста.

Лучшая практика: Не определяйте функции с eval. Это может стать беспорядочным.

Лучшая практика: eval = evil. Не используйте его.

В то время, когда требуется отладка проблемы, вы могли бы написать очень простой модуль, который определяет fooBar, тогда вы можете выполнить его из поля ввода PHP, если хотите.

Смежные вопросы