2013-09-16 66 views
1

在我的drupal 7網站上運行了一個drush更新之後,我用來爲表單的用戶信息引入的php代碼執行兩次。這是一個問題,因爲我已經創造了一些用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?更重要的是,我怎麼能阻止它這樣做呢?

編輯: 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

就像你說的那樣,你輸入的php作爲輸入被評估兩次....一次爲傳情,一次爲全身文本。

最佳實踐:不要用eval定義函數。它可以很快得到混亂。

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

在調試問題所需的時間內,您可以編寫一個定義fooBar的非常基本的模塊,然後您可以根據需要從PHP輸入字段執行該模塊。