1

私の drupal 7 サイトで drush update を実行した後、フォームのユーザー情報を取り込むために使用する php コードが 2 回実行されます。PHP でいくつかの関数を作成したため、関数を再宣言しようとして 2 回目に 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 を 2 回実行するのはなぜですか? さらに重要なことに、どうすればそうならないようにできますか?

編集: Drupal は、トリミングされたバージョンで 1 回、フル バージョンで 1 回、フル バージョンで 1 回、php を実行しているようです。これは、投稿をプレビューするときに期待するものです。プレビュー版はあまり気にしないので、喜んで削除します。ページを表示すると Drupal がコードを 2 回実行するのはなぜですか? (実際にページを表示しているときに、トリミングされたバージョンで実行されるのはなぜですか?)

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は2回評価されています.1回はティーザー用、もう1回は本文全体です。

ベスト プラクティス: 関数を eval で定義しないでください。すぐにぐちゃぐちゃになることがあります。

ベター プラクティス: eval = 悪。使用しないでください。

問題のデバッグにかかる​​時間内に、fooBar を定義する非常に基本的なモジュールを作成し、必要に応じて PHP 入力フィールドから実行することができます。

于 2013-09-17T00:47:14.467 に答える