Wie führe ich PHP mit drush aus?

28

Ich bin neu bei Drush. Wie kann ich dieses Skript ausführen, um Kommentare eines bestimmten Benutzers zu entfernen?

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

Das wäre auch großartig, wenn Sie mir sagen könnten, wie das Skript fertiggestellt werden soll, damit Benutzername anstelle von $ uid verwendet wird.

Vielen Dank

alfish
quelle

Antworten:

24

Sie können das Skript in ein Drush-Shell-Skript konvertieren .

Ein Drush-Shell-Skript ist eine beliebige Unix-Shell-Skriptdatei, deren "Execute" -Bit gesetzt ist (dh über chmod +x myscript.drush) und die mit einer bestimmten Zeile beginnt:

    #!/usr/bin/env drush

oder

    #!/full/path/to/drush

Drush-Skripte sind aus folgenden Gründen besser als Bash-Skripte:

  • Sie sind in PHP geschrieben
  • Drush kann die Site booten, bevor das Skript ausgeführt wird

Das folgende Beispiel finden Sie in 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();

 

Sie können das Skript ausführbar machen, sodass Sie es mit <script file> <parameters>dem Skriptnamen ausführen können <script name>und <parameters>die Parameter an das Skript übergeben werden. Wenn das Skript nicht ausführbar ist, rufen Sie es mit auf drush <script name> <parameters>.

kiamlaluno
quelle
Werden keine PHP-Tags benötigt?
AlxVallejo,
Soweit ich mich erinnere, verwenden Sie in Drush-Skripten keine PHP-Tags.
kiamlaluno
17

Mit drush php-evalkönnen Sie Ihr Skript ausführen, ohne es zuerst in einer Datei speichern zu müssen:

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

Dies verwendet geschachtelte Anführungszeichen. Um ein Durcheinander zu vermeiden, empfehle ich, "im PHP-Code nur doppelte Anführungszeichen zu verwenden.

Tanius
quelle
13

Ich denke, Sie drush -d scr --uri=example.org sample_script.phpmöchten sample_script.php ausführen.

Mike Gifford
quelle
8

Wir können drush php-script script_namePHP-Dateien in Drush ausführen.

Wenn Sie Hilfe zu Drush zum Ausführen von PHP-Dateien benötigen Drush php-script --help, listet Type die Befehle auf

Hinweis: Ich habe PHP scirpt im Root-Ordner von Drupal abgelegt

Bhanu Prakash Ryaga
quelle
5

Es ist einfach, ein PHP-Skript von auszuführen drush scr ~/sample.php.

heshanlk
quelle
2

Führen Sie auf Ihrer Befehlszeile von überall aus Folgendes aus:

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

Wenn Sie bereits unter / path / to / drupal-installation sind, führen Sie einfach Folgendes aus:

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

Falls Sie unter /path/to/drupal-installation/sites/youdomain.com noch weiter vorne sind, als nur auszuführen:

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

deine script.php Datei:

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

Bitte beachten Sie, dass das db_resultin Drupal 7 entfernt wurde. Der obige Code kann geändert werden in:

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

Wenn Sie den Benutzernamen anstelle der UID verwenden möchten, können Sie den Benutzernamen folgendermaßen abrufen:

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