1

在我的 drupal 7 站点上运行 drush 更新后,我用来为表单引入用户信息的 php 代码执行了两次。这是一个问题,因为我在 php 中创建了一些被调用的函数,因此当它第二次执行 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 两次?更重要的是,我怎样才能让它不这样做呢?

编辑: Drupal 似乎对修剪版本执行一次 php,对完整版本执行一次,对完整版本执行一次。这是我在预览帖子时所期望的。我真的不关心预览版,所以我很乐意摆脱它。为什么我查看页面时 Drupal 会执行两次代码?(为什么当我实际查看页面时它会为修剪后的版本运行它?)

4

2 回答 2

2

某些东西必须重新包含/要求包含此函数的文件,或者您在循环中拥有此函数。找到它,或者用function_exists包装它。

<?php

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

fooBar();
于 2013-09-16T15:50:19.713 回答
0

就像你说的那样,你输入的 php 被评估了两次……一次是预告片,一次是全文。

最佳实践:不要用 eval 定义函数。它会很快变得混乱。

更好的做法:eval = evil。不要使用它。

在调试问题的过程中,您可以编写一个非常基本的模块来定义 fooBar,然后您可以根据需要从 PHP 输入字段中执行它。

于 2013-09-17T00:47:14.467 回答