2012-02-27 248 views
5

我試圖構建一個站點,您可以通過web gui安裝Drupal。從PHP腳本運行Drush命令

<?php 

`drush site-install --yes --db-url=mysql://USER:[email protected]:3306/DATABASE --account-name=DRUPAL_USER --account-pass=DRUPAL_PASSWORD [email protected] --site-name=SiteName`; 

?> 

以上是腳本的片段。 如果我運行在瀏覽器,它不會做任何事情的腳本,但如果我嘗試使用運行它作爲WWW的數據:

php install_script.php 

一切完美的作品! 我在終端上得到了Drush的輸出。

誰能告訴我如何觸發Drush從PHP腳本執行Drupal安裝/設置? 我完全迷失了,我看不出我做錯了什麼。

我將不勝感激任何幫助!謝謝。

回答

3

我似乎從PHP這樣做是爲了有固定的:

<?php 
exec('/usr/bin/php /var/www/drush/drush.php site-install --yes --db-url=mysql://USER:[email protected]:3306/DATABASE --account-name=DRUPAL_USER --account-pass=DRUPAL_PASSWORD [email protected] --site-name=SiteName'); 
?> 

我基本上去掉了Drush梨包和手動安裝Drush 5.0成的/ var/WWW/drush。

2

那麼php exec函數呢?即:

<?php 
    exec('drush site-install --yes --db-url=mysql://USER:[email protected]:3306/DATABASE --account-name=DRUPAL_USER --account-pass=DRUPAL_PASSWORD [email protected] --site-name=SiteName'); 
?> 
+0

不幸的是,它並沒有改變任何東西。 如果我把它放在我的腳本中,並從瀏覽器中運行它,我不會得到任何結果。 如果我使用php install_script.php將其作爲www-data運行,它可以正常工作。 – hhorn 2012-02-27 12:17:52

+0

也許php-cli(php install_script.php)和瀏覽器執行(http://localhost/whatever/install_script.php)有不同的環境,變量等等。用完整的drush路徑(/ usr/local/bin/drush ...)嘗試一下。 – r0sk 2012-02-27 12:34:47

+0

不錯的猜測,但它仍然給我同樣的結果。 – hhorn 2012-02-27 12:44:03

2

這可能很容易成爲權限問題。當您從瀏覽器調用頁面時,它將由web服務器用戶(例如apache或www)運行,但是當您從命令行運行時,您會像運行一樣運行它。

  • 重讀此信息我看到您將它從命令行作爲www-data運行,但您的環境可能與web服務器不同。通過運行su - www-data作爲www-data運行是比su www-data更好的測試。
1

我發現(在OSX上運行Acquia Dev Desktop)幾乎所有我們在shell中認爲理所當然的東西都是不可用的。下面是我如何得到一個結果 - 當在一個rules.module php eval()上下文中運行時。

# When running from web, drush doesn't have any environment set up, 
# has no search paths for site-aliases, and maybe can't even find PHP. 
$php = "/Applications/acquia-drupal/php5_4/bin/php"; 
$drush_php = "/Users/dan/.composer/vendor/bin/drush.php"; 
$drush_options = " --config=/Users/dan/.drushrc.php "; 
$command = "$php $drush_php $drush_options $site_alias status"; 
$result = exec($command, $output, $return); 
drupal_set_message(print_r(array($command, $result, $output, $return), 1)); 

顯然,適當調整你的路徑。完整的命令結束爲:

/Applications/acquia-drupal/php5_4/bin/php /Users/dan/.composer/vendor/bin/drush.php --config=/Users/dan/.drushrc.php @example.org.nz status