2012-02-27 27 views
5

Estoy intentando crear un sitio donde pueda instalar Drupal a través de una interfaz web.Ejecutar el comando Drush desde un script PHP

<?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`; 

?> 

El de arriba es un fragmento del script. Si ejecuto el script desde el navegador que no hace nada, pero si intento funcionar como www-data con:

php install_script.php 

todo funciona perfectamente! Obtengo la salida de Drush en el terminal sin problemas.

¿Alguien me puede decir cómo hacer que Drush haga la instalación/configuración de Drupal desde un script PHP? Estoy completamente perdido y no puedo ver lo que estoy haciendo mal.

Agradeceré cualquier ayuda en esto! Gracias.

Respuesta

3

he parecen haber fijado que al hacer esto desde 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'); 
?> 

básicamente eliminar el paquete de pera Drush e instalado manualmente Drush 5.0 en/var/www/drush.

2

¿Qué pasa con la función php exec ?. Es decir .:

<?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

Lamentablemente, no cambia nada. Si pongo eso en mi script y lo ejecuto desde el navegador, no obtengo ningún resultado. Si lo ejecuto como www-data con php install_script.php, funciona bien. – hhorn

+0

Quizás php-cli (php install_script.php) y la ejecución del navegador (http: //localhost/whatever/install_script.php) tengan distintos entornos, vars y demás. Pruébelo con la ruta completa del drush (/ usr/local/bin/drush ...). – r0sk

+0

Buena conjetura, pero todavía me da el mismo resultado. – hhorn

2

Esto podría haber sido un problema de permisos. Cuando invoca una página desde un navegador, está siendo ejecutada por el usuario del servidor web (por ejemplo, apache o www), pero cuando se ejecuta desde la línea de comandos, la ejecuta como usted mismo.

  • Volviendo a leer esto Veo que lo ejecutó desde la línea de comandos como www-data, pero su entorno podría haber sido diferente de los servidores web. Ejecutarse como www-data ejecutando su - www-data es una mejor prueba que su www-data.
1

Encontré (ejecutando Acquia Dev Desktop en OSX) que casi todo lo que damos por sentado en el shell no estaba disponible. Así es como obtuve un resultado: cuando se ejecuta en un contexto de 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)); 

Obviamente, ajuste sus rutas según corresponda. El comando completo terminó como:

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