2013-09-16 3 views
1

Après avoir exécuté une mise à jour drush sur mon site Drupal 7, le code php que j'utiliser pour apporter des informations utilisateur pour un formulaire deux fois exécute. Ceci est un problème parce que je l'ai créé certaines fonctions dans le php qui s'appeler ainsi quand il exécute le PHP la deuxième fois, il tente de re-déclarer les fonctions et je reçois des erreurs comme ceci:Drupal PHP exécuter deux fois

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 

Il n » Peu importe ce que la fonction est appelée ou ce qu'elle fait. Dans cet exemple, le cas présent est le code:

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

fooBar(); 
?> 

Il ne semble pas aussi à la matière ce type de contenu de la page est (je mon cas, je besoin d'apporter des informations utilisateur dans un formulaire).

Pourquoi Drupal exécute le PHP deux fois? Et plus important encore, comment puis-je l'empêcher de le faire? Drupal semble exécuter le php une fois pour la version rognée et une fois pour la version complète et une fois pour la version complète. C'est ce à quoi je m'attends quand je prévisualise le post. Je ne me soucie pas vraiment de la version d'aperçu, donc je serais heureux de m'en débarrasser. Pourquoi Drupal exécute-t-il deux fois le code lorsque je visualise la page? (Pourquoi est-il fonctionner pour la version coupé quand je la consulter la page?)

+0

Quels modules ont été mis à jour? – Clive

+0

On dirait que le noyau drupal a été mis à jour de 7.22 à 7.23. Le module Vues a également été mis à jour. – cjc

Répondre

2

Quelque chose doit être ré-y compris/nécessitant le fichier contenant cette fonction ou vous avez cette fonction dans une boucle. Trouvez-le ou enveloppez-le avec function_exists.

<?php 

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

fooBar(); 
+0

qui fonctionne comme un moyen de faire fonctionner les choses pour l'instant, mais cela ne résout pas vraiment le problème. Drupal exécute encore deux fois le code, et c'est vraiment ce que je veux empêcher. De plus, le 'fooBar()' doit être déplacé à l'intérieur de l'instruction if sinon il sera également appelé deux fois. – cjc

+0

@cjc, pouvez-vous fournir un peu plus d'informations? Quels modules utilisez-vous? Où cette fonction est appelée? Que devrait faire cette fonction? – labue

+0

Le code est en cours d'exécution en tant que corps de la page en utilisant le code PHP. Il s'avère que le 'fooBar()' n'a pas besoin d'être dans l'instruction if puisque la première exécution est pour le texte coupé et la deuxième exécution pour le texte intégral. – cjc

0

Comme vous l'avez dit, le php vous avez entré comme entrée est eval'd deux fois .... une fois pour le teaser, et une fois pour le texte complet du corps. Meilleure pratique: Ne pas définir les fonctions avec eval.

Cela peut devenir salissant rapidement.

meilleures pratiques: eval = mal. Ne l'utilisez pas.

Dans le temps qu'il faut pour déboguer le problème, vous pourriez avoir écrit un module très basique qui définit fooBar, vous pouvez l'exécuter à partir de votre champ de saisie PHP si vous voulez.

Questions connexes