Come eseguire script php usando drush?


28

Sono nuovo di Drush. Come posso eseguire questo script per rimuovere i commenti di un utente specifico?

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

Inoltre, sarebbe fantastico se tu potessi dirmi come completare lo script in modo che richieda il nome utente anziché $ uid.

Grazie

Risposte:


24

Puoi convertire lo script in uno script di shell Drush .

Uno script di shell drush è qualsiasi file di script di shell Unix che ha il suo set di bit "esegui" (cioè, via chmod +x myscript.drush) e che inizia con una riga specifica:

    #!/usr/bin/env drush

o

    #!/full/path/to/drush

Gli script Drush sono migliori degli script Bash per i seguenti motivi:

  • Sono scritti in PHP
  • Drush può avviare il bootstrap del sito prima di eseguire lo script

Il seguente esempio è disponibile su 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();

 

È possibile rendere eseguibile lo script, quindi è possibile eseguirlo con <script file> <parameters>dove si <script name>trova il nome dello script e <parameters>i parametri passati allo script; se lo script non è eseguibile, lo si chiama con drush <script name> <parameters>.


I tag PHP non sono necessari?
AlxVallejo,

Per quanto ricordo, non usi i tag PHP negli script Drush.
kiamlaluno

17

Con drush php-eval, puoi eseguire il tuo script senza dover prima salvarlo in un file:

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

Questo usa le virgolette nidificate, quindi per evitare un disordine ti consiglio di usare solo doppie virgolette "all'interno del codice PHP.


13

Penso che tu stia guardando drush -d scr --uri=example.org sample_script.phpper eseguire sample_script.php.


8

Possiamo usare drush php-script script_nameper eccitare il file php in Drush.

Per assistenza relativa a Drush per l'esecuzione di file php, Type Drush php-script --helpmostrerà i comandi

Nota: ho inserito php scirpt nella cartella principale di Drupal


5

È semplice eseguire uno script php drush scr ~/sample.php.


2

Sulla riga di comando, da qualsiasi luogo, esegui:

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

Se sei già in / path / to / drupal-installation, esegui:

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

Nel caso in cui tu sia ancora più avanti su /path/to/drupal-installation/sites/youdomain.com di quanto corri:

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

il tuo file 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.

0

Nota che db_resultè stato rimosso in Drupal 7. Il codice sopra può essere modificato in:

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

Se si desidera utilizzare il nome utente anziché l'UID, è possibile ottenere il nome utente utilizzando questo:

$username = user_load($uid)->name;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.