【问题标题】:Run Drush command from a PHP script从 PHP 脚本运行 Drush 命令
【发布时间】:2012-03-16 21:31:30
【问题描述】:

我正在尝试构建一个站点,您可以在其中通过 Web gui 安装 Drupal。

<?php

`drush site-install --yes --db-url=mysql://USER:PASSWORD@localhost:3306/DATABASE --account-name=DRUPAL_USER --account-pass=DRUPAL_PASSWORD --account-mail=contact@email.com --site-name=SiteName`;

?>

以上是脚本中的一个sn-p。 如果我从浏览器运行脚本,它不会做任何事情,但如果我尝试将它作为 www-data 运行:

php install_script.php

一切正常! 我在终端中得到了 Drush 的输出就好了。

谁能告诉我如何触发 Drush 从 PHP 脚本进行 Drupal 安装/设置? 我完全迷失了,我看不出我做错了什么。

我将不胜感激任何帮助!谢谢。

【问题讨论】:

    标签: php installation drush


    【解决方案1】:

    php exec 函数呢?即:

    <?php
      exec('drush site-install --yes --db-url=mysql://USER:PASSWORD@localhost:3306/DATABASE --account-name=DRUPAL_USER --account-pass=DRUPAL_PASSWORD --account-mail=contact@email.com --site-name=SiteName');
    ?>
    

    【讨论】:

    • 不幸的是它并没有改变任何东西。如果我把它放在我的脚本中并从浏览器运行它,我不会得到任何结果。如果我使用 php install_script.php 作为 www-data 运行它,它工作正常。
    • 也许 php-cli (php install_script.php) 和浏览器执行 (localhost/whatever/install_script.php) 有不同的环境、变量等。尝试使用完整的 drush 路径 (/usr/local/bin/drush...)。
    • 猜得好,但它仍然给我同样的结果。
    【解决方案2】:

    我似乎已经通过 php 解决了这个问题:

    <?php
    exec('/usr/bin/php /var/www/drush/drush.php site-install --yes --db-url=mysql://USER:PASSWORD@localhost:3306/DATABASE --account-name=DRUPAL_USER --account-pass=DRUPAL_PASSWORD --account-mail=contact@email.com --site-name=SiteName');
    ?>
    

    我基本上删除了 Drush pear 包并手动将 Drush 5.0 安装到 /var/www/drush 中。

    【讨论】:

      【解决方案3】:

      这很可能是权限问题。当您从浏览器调用页面时,它由网络服务器用户(例如 apache 或 www)运行,但当您从命令行运行时,您将自己运行它。

      • 重读此内容我看到您从命令行将其作为 www-data 运行,但您的环境可能与网络服务器不同。通过运行 su - www-data 作为 www-data 运行是比 su www-data 更好的测试。

      【讨论】:

        【解决方案4】:

        我发现(在 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
        

        【讨论】:

          猜你喜欢
          • 2012-05-03
          • 1970-01-01
          • 2015-11-11
          • 2014-05-02
          • 2014-01-15
          • 1970-01-01
          • 2017-12-07
          • 1970-01-01
          相关资源
          最近更新 更多