2012-02-27 213 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