Jak wykonać skrypt php za pomocą drush?

28

Jestem nowy w Drush. Jak mogę uruchomić ten skrypt, aby usunąć komentarze określonego użytkownika?

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

Byłoby również świetnie, gdybyś mógł mi powiedzieć, jak ukończyć skrypt, aby zamiast nazwy użytkownika pobierał nazwę użytkownika.

Dzięki

alfish
źródło

Odpowiedzi:

24

Możesz przekonwertować skrypt w skrypt powłoki Drusha .

Skrypt powłoki drush to dowolny plik skryptu powłoki systemu Unix, który ma ustawiony bit „wykonania” (tj. Via chmod +x myscript.drush) i zaczyna się od określonej linii:

    #!/usr/bin/env drush

lub

    #!/full/path/to/drush

Skrypty Drush są lepsze niż skrypty Bash z następujących powodów:

  • Są napisane w PHP
  • Drush może uruchomić stronę przed uruchomieniem skryptu

Poniżej znajduje się przykład, który można znaleźć na 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();

 

Można ustawić skrypt jako wykonywalny, aby można go było wykonać, podając <script file> <parameters>gdzie <script name>jest nazwa skryptu i <parameters>parametry przekazywane do skryptu; jeśli skrypt nie jest wykonywalny, wywołujesz go za pomocą drush <script name> <parameters>.

kiamlaluno
źródło
Czy tagi PHP nie są potrzebne?
AlxVallejo
O ile pamiętam, nie używasz znaczników PHP w skryptach Drush.
kiamlaluno
17

Za pomocą drush php-evalmożesz uruchomić skrypt bez uprzedniego zapisania go w pliku:

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

Wykorzystuje to zagnieżdżone cudzysłowy, więc aby uniknąć bałaganu, zalecam stosowanie tylko podwójnych cudzysłowów "w kodzie PHP.

Tanius
źródło
13

Myślę, że chcesz drush -d scr --uri=example.org sample_script.phpuruchomić sample_script.php.

Mike Gifford
źródło
8

Możemy użyć drush php-script script_namedo wycięcia pliku php w Drush.

Aby uzyskać pomoc związaną z Drush do wykonywania plików php, Type Drush php-script --helpwyświetli listę poleceń

Uwaga: umieściłem scppt php w folderze głównym Drupala

Bhanu Prakash Ryaga
źródło
5

To proste, możesz uruchomić skrypt php drush scr ~/sample.php.

heshanlk
źródło
2

W wierszu polecenia, z dowolnego miejsca, uruchom:

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

Jeśli jesteś już w / path / to / drupal-installation, po prostu uruchom:

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

Jeśli masz jeszcze więcej możliwości na /path/to/drupal-installation/sites/youdomain.com niż po prostu uruchom:

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

twój plik 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
źródło
0

Należy pamiętać, że db_resultzostał usunięty w Drupal 7. Powyższy kod można zmienić na:

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

Jeśli chcesz użyć nazwy użytkownika zamiast identyfikatora UID, możesz uzyskać nazwę użytkownika, używając tego:

$username = user_load($uid)->name;
rashidkhan
źródło