2011-08-25 35 views
1

我已經把我自己的PHP文件放在/ sites/all/modules/< myfolder>中,並通過$.post(<myphppage>)從靜態html頁面調用它(javascript函數)/ sites/all/modules/< myfolder>。drupal未定義的函數靜態HTML與發佈到php

然而,PHP似乎沒有被執行的預期,但獲取調用(在apache httpd的訪問日誌顯示它post'ed到)。

如果我嘗試手動請求相同的PHP頁面,我收到此錯誤:

Fatal error: Call to undefined function db_insert() in /full/path/to/sites/modules/<myfolder>/<myphppage> on line x.

echo聲明我在PHP頁面此錯誤上述輸出正常,而只使用$_GET['paramname']。 (和_POST,爲了測試直接請求而更改)打印一些查詢字符串參數以進行調試)。

此外,當我添加了一個調用watchdog,我收到:

Fatal error: Call to undefined function watchdog() in /full/path/to/sites/modules/<myfolder>/<myphppage> on line x.

是沒可能直接訪問PHP頁面?或者有一個我需要導入的Drupal庫?或者我只是簡單地丟失了Drupal的其他作品?

回答

1

由於您的PHP文件獨立於Drupal並且不引導它,因此您會收到有關未定義函數的錯誤。

做你正在嘗試做的Drupal的方法是創建一個模塊(請參閱Creating Drupal 7.x modules,並Creating Drupal 6.x modules)定義它與hook_menu()處理一個URL;該URL隨後將與$.post()一起使用。

作爲引導Drupal方式的示例,請參閱每個Drupal安裝附帶的index.php文件的內容。 (下面的代碼是從的Drupal 7中使用的那一個)

/** 
* Root directory of Drupal installation. 
*/ 
define('DRUPAL_ROOT', getcwd()); 

require_once DRUPAL_ROOT . '/includes/bootstrap.inc'; 
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); 

的代碼改變從Drupal的6至7的Drupal,但drupal_bootstrap()在兩個Drupal的版本中定義。

正確的方法是創建一個模塊,反正。有關爲什麼模塊應該使用引導Drupal的PHP文件的原因列表,請參閱Are there cases where a third-party module would need to use its own file similar to xmlrp.php, cron.php, or authenticate.php?

+0

謝謝,引導程序爲我的初始測試工作。另外感謝關於如何做到這一點的額外參考資料(長期目標,只是想先靜態測試一些東西)。 – CrackerJack9