¿Cómo ejecutar el script php usando drush?

28

Soy nuevo en Drush. ¿Cómo puedo ejecutar este script para eliminar los comentarios de un usuario específico?

$uid = xx // the spam users id;
$query = db_query("SELECT cid FROM {comments} WHERE uid = %d", $uid);
while($cid = db_result($query)) {
  comment_delete($cid);
}

Además, eso sería genial si pudiera decirme cómo completar el script para que tome el nombre de usuario en lugar de $ uid.

Gracias

Alfish
fuente

Respuestas:

24

Puede convertir el script en un script de shell Drush .

Un script de shell drush es cualquier archivo de script de shell Unix que tiene su conjunto de bits "ejecutar" (es decir, vía chmod +x myscript.drush) y que comienza con una línea específica:

    #!/usr/bin/env drush

o

    #!/full/path/to/drush

Las secuencias de comandos Drush son mejores que las secuencias de comandos Bash por los siguientes motivos:

  • Estan escritos en PHP
  • Drush puede arrancar el sitio antes de ejecutar el script

El siguiente es el ejemplo que puede encontrar en helloword.script .

#!/usr/bin/env drush

//
// This example demonstrates how to write a drush
// "shebang" script.  These scripts start with the
// line "#!/usr/bin/env drush" or "#!/full/path/to/drush".
//
// See `drush topic docs-scripts` for more information.
//
drush_print("Hello world!");
drush_print();
drush_print("The arguments to this command were:");

//
// If called with --everything, use drush_get_arguments
// to print the commandline arguments.  Note that this
// call will include 'php-script' (the drush command)
// and the path to this script.
//
if (drush_get_option('everything')) {
  drush_print("  " . implode("\n  ", drush_get_arguments()));
}
//
// If --everything is not included, then use
// drush_shift to pull off the arguments one at
// a time.  drush_shift only returns the user
// commandline arguments, and does not include
// the drush command or the path to this script.
//
else {
  while ($arg = drush_shift()) {
    drush_print('  ' . $arg);
  }
}

drush_print();

 

Puede hacer que el script sea ejecutable, por lo que puede ejecutarlo con <script file> <parameters>dónde <script name>está el nombre del script y <parameters>los parámetros pasados ​​al script; si el script no es ejecutable, lo llama con drush <script name> <parameters>.

kiamlaluno
fuente
¿No se necesitan etiquetas PHP?
AlxVallejo
Hasta donde recuerdo, no usas etiquetas PHP en scripts Drush.
kiamlaluno
17

Con drush php-eval, puede ejecutar su script sin tener que guardarlo primero en un archivo:

drush php-eval '
  $uid = 1234; 
  $query = db_query("SELECT cid FROM {comments} WHERE uid = %d", $uid);
  while($cid = db_result($query)) {
    comment_delete($cid);
  }
'

Esto usa comillas anidadas, por lo que para evitar un desorden, recomiendo usar solo comillas dobles "dentro del código PHP.

Tanius
fuente
13

Creo que estás buscando drush -d scr --uri=example.org sample_script.phpejecutar sample_script.php.

Mike Gifford
fuente
8

Podemos usar drush php-script script_namepara ejecutar archivos php en Drush.

Para obtener ayuda relacionada con Drush para ejecutar archivos php, Type le Drush php-script --helpmostrará los comandos

Nota: he colocado php scirpt en la carpeta raíz de Drupal

Bhanu Prakash Ryaga
fuente
5

Es simple, puede ejecutar un script php drush scr ~/sample.php.

heshanlk
fuente
2

En su línea de comando, desde cualquier lugar, ejecute:

$ drush --root=/path/to/drupal-installation --uri=youdomain.com scr /path/to/your/script.php

En caso de que ya esté en / path / to / drupal-installation, simplemente ejecute:

$ drush --uri=youdomain.com scr /path/to/your/script.php

En caso de que esté aún más adelante en /path/to/drupal-installation/sites/youdomain.com que simplemente ejecutar:

$ drush scr /path/to/your/script.php

su archivo script.php:

<?php
// Not always needed but sometimes you might have to first login as an administrator.
$admin_uid = 1;
$form_state = array('uid' => $admin_uid);
user_login_submit(array(), $form_state);

// Now the logged in user global $user object become available.
global $user;
print_r($user);

// Do whatever you want here.
Francisco luz
fuente
0

Tenga en cuenta que db_resultse ha eliminado en Drupal 7. El código anterior se puede cambiar a:

$result = db_query($query);
foreach($result as $cid) {
  comment_delete($cid);
}

Si desea usar el nombre de usuario en lugar del uid, puede obtener el nombre de usuario usando esto:

$username = user_load($uid)->name;
rashidkhan
fuente