从PHP脚本运行Drush命令
问题描述:
我试图构建一个站点,您可以通过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安装/设置? 我完全迷失了,我看不出我做错了什么。
我将不胜感激任何帮助!谢谢。
答
我似乎从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。
答
那么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');
?>
答
这可能很容易成为权限问题。当您从浏览器调用页面时,它将由web服务器用户(例如apache或www)运行,但是当您从命令行运行时,您会像运行一样运行它。
- 重读此信息我看到您将它从命令行作为www-data运行,但您的环境可能与web服务器不同。通过运行su - www-data作为www-data运行是比su www-data更好的测试。
答
我发现(在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
不幸的是,它并没有改变任何东西。 如果我把它放在我的脚本中,并从浏览器中运行它,我不会得到任何结果。 如果我使用php install_script.php将其作为www-data运行,它可以正常工作。 – hhorn 2012-02-27 12:17:52
也许php-cli(php install_script.php)和浏览器执行(http://localhost/whatever/install_script.php)有不同的环境,变量等等。用完整的drush路径(/ usr/local/bin/drush ...)尝试一下。 – r0sk 2012-02-27 12:34:47
不错的猜测,但它仍然给我同样的结果。 – hhorn 2012-02-27 12:44:03