Запустите команду Drush из PHP-скрипта

Я пытаюсь создать сайт, на котором вы можете установить Drupal через веб-интерфейс.

<?php

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

?>

Выше приведен фрагмент сценария. Если я запускаю скрипт из браузера, он ничего не делает, но если я попытаюсь запустить его как www-данные с помощью:

php install_script.php

Все работает отлично! Я отлично получаю вывод Drush в терминале.

Может ли кто-нибудь сказать мне, как запустить Drush для установки/настройки Drupal из PHP-скрипта? Я полностью потерян, и я не вижу, что я делаю неправильно.

Я буду признателен за любую помощь в этом! Спасибо.


person hhorn    schedule 27.02.2012    source источник


Ответы (4)


Кажется, я исправил это, сделав это из 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 [email protected] --site-name=SiteName');
?>

По сути, я удалил пакет Drush pear и вручную установил Drush 5.0 в /var/www/drush.

person hhorn    schedule 27.02.2012

Как насчет функции php exec? То есть:

<?php
  exec('drush site-install --yes --db-url=mysql://USER:PASSWORD@localhost:3306/DATABASE --account-name=DRUPAL_USER --account-pass=DRUPAL_PASSWORD [email protected] --site-name=SiteName');
?>
person oscarmlage    schedule 27.02.2012
comment
К сожалению, это ничего не меняет. Если вместо этого я поставлю это в свой скрипт и запущу из браузера, я не получу никакого результата. Если я запускаю его как www-data с php install_script.php, он работает нормально. - person hhorn; 27.02.2012
comment
Возможно, php-cli (php install_script.php) и выполнение в браузере (localhost/whatever/install_script.php) были разные среды, вары и так далее. Попробуйте использовать полный путь drush (/usr/local/bin/drush...). - person oscarmlage; 27.02.2012
comment
Хорошая догадка, но она все еще дает мне тот же результат. - person hhorn; 27.02.2012

Это могло легко быть проблемой разрешений. Когда вы вызываете страницу из браузера, она запускается пользователем веб-сервера (например, apache или www), но когда вы запускаете из командной строки, вы запускаете ее от своего имени.

  • Перечитывая это, я вижу, что вы запустили его из командной строки как www-data, но ваша среда могла отличаться от веб-серверов. Запуск от имени www-data путем запуска su - www-data является лучшим тестом, чем su www-data.
person Paul DeWolf    schedule 17.08.2013

Я обнаружил (запустив Acquia Dev Desktop на OSX), что почти все, что мы считаем само собой разумеющимся в оболочке, было недоступно. Вот как я получил результат - при запуске в контексте 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
person dman    schedule 18.03.2015