Comment exécuter un script php en utilisant drush?

28

Je suis nouveau chez Drush. Comment puis-je exécuter ce script pour supprimer les commentaires d'un utilisateur spécifique?

$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);
}

De plus, ce serait génial si vous pouviez me dire comment terminer le script pour qu'il prenne le nom d'utilisateur au lieu de $ uid.

Merci

alfish
la source

Réponses:

24

Vous pouvez convertir le script dans un script shell Drush .

Un script shell drush est un fichier de script shell Unix dont le bit d'exécution est défini (c'est-à-dire via chmod +x myscript.drush) et qui commence par une ligne spécifique:

    #!/usr/bin/env drush

ou

    #!/full/path/to/drush

Les scripts Drush sont meilleurs que les scripts Bash pour les raisons suivantes:

  • Ils sont écrits en PHP
  • Drush peut amorcer le site avant d'exécuter le script

Voici l'exemple que vous pouvez trouver sur 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();

 

Vous pouvez rendre le script exécutable, vous pouvez donc l'exécuter avec <script file> <parameters><script name>est le nom du script et <parameters>les paramètres transmis au script; si le script n'est pas exécutable, vous l'appelez avec drush <script name> <parameters>.

kiamlaluno
la source
Les balises PHP ne sont-elles pas nécessaires?
AlxVallejo
Pour autant que je m'en souvienne, vous n'utilisez pas de balises PHP dans les scripts Drush.
kiamlaluno
17

Avec drush php-eval, vous pouvez exécuter votre script sans avoir à l'enregistrer d'abord dans un fichier:

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

Cela utilise des guillemets imbriqués, donc pour éviter un gâchis, je recommande d'utiliser uniquement des guillemets doubles "dans le code PHP.

tanius
la source
13

Je pense que vous cherchez à drush -d scr --uri=example.org sample_script.phpexécuter sample_script.php.

Mike Gifford
la source
8

Nous pouvons utiliser drush php-script script_namepour excuter le fichier php dans Drush.

Pour obtenir de l'aide sur Drush pour l'exécution des fichiers php, Type Drush php-script --helpvous énumérera les commandes

Remarque: j'ai placé php scirpt dans le dossier racine de Drupal

Bhanu Prakash Ryaga
la source
5

C'est simple, vous pouvez exécuter un script php par drush scr ~/sample.php.

heshanlk
la source
2

Sur votre ligne de commande, où que vous soyez, exécutez:

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

Si vous êtes déjà dans / path / to / drupal-installation, lancez simplement:

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

Dans le cas où vous êtes encore plus avancé sur /path/to/drupal-installation/sites/youdomain.com que d'exécuter:

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

votre fichier 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
la source
0

Veuillez noter que le db_resulta été supprimé dans Drupal 7. Le code ci-dessus peut être changé en:

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

Si vous souhaitez utiliser le nom d'utilisateur au lieu de l'uid, vous pouvez obtenir le nom d'utilisateur en utilisant ceci:

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