2010-11-01 34 views
1

我想在使用exec()的Drupal中創建一個模塊。如果我在瀏覽器中手動加載它,或者當我將它作爲su -l www-data運行時,腳本運行正常,但是當由Drupal作爲模塊運行時,exec函數無法運行。我想知道如何從中獲得更多的數據以更好地進行調試,或者如果有人可能知道Drupal爲什麼不讓exec運行。問題與執行(),具體在Drupal

當被Drupal加載時,整個腳本的執行沒有給我任何警告或錯誤,我覺得很奇怪。如果我在exec()之後添加or die('could not exec');,那麼當我加載我的drupal頁面時,它確實顯示我只是「無法執行」而沒有其他任何內容。

任何想法?謝謝!

[編輯]

我得到這個通過指定php文件我想給exec的顯式路徑工作。也就是說,我改變了: exec('php mymodule.helper',$output);

exec('php /var/www/mydrupal/modules/mymodule/mymodule.helper',$output);

[EDIT2]
其實,我現在把它改爲:
exec ('php ' . __DIR__ . '/mymodule.helper',$output);

這完美的作品。

+0

你想要執行什麼? – hummingBird 2010-11-01 21:41:13

+0

具體來說,'exec('php mymodule.helper',$ output);' – Joseph 2010-11-01 21:43:30

+0

如果你在命令中添加「2>&1」,它說什麼? – user187291 2010-11-01 22:02:17

回答

0

EXEC( 'PHP' DIR「/mymodule.helper',$output);

1

我建議你先將問題縮小到a)非CLI CLI中的某些東西,b)Drupal中的某些東西,或c)通過exec運行的命令中的某些東西。

一些測試:

  • 這是真正的Drupal的具體情況?嘗試將一些exec()代碼複製到.php文件並直接加載(Drupal外部)。它在那裏更好嗎? (注意:您的CLI非Drupal和非CLI Drupal的比較與Drupal和非Drupal的比較並不完全相同。)
  • 非CLI PHP是否以安全模式運行? (我把我的賭注放在這個問題上。)你可以用echo(ini_get('safe_mode'));來檢查。
  • exec()的實際返回變量是什麼?只要檢查它是真是假都不是很有幫助;作爲一個字符串,它幾乎總是如此。嘗試$result = exec(...); print_r($result);
+0

安全模式關閉(至少它在phpinfo()中顯示爲off;但是,當我嘗試執行echo(ini_get('safe_mode'))時,不輸出任何內容:設置$ result = exec(),然後print_r() '$結果什麼都不輸出。 – Joseph 2010-11-02 01:27:25