Como executar o script php usando drush?

28

Eu sou novo no Drush. Como posso executar este script para remover comentários de um usuário 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);
}

Além disso, seria ótimo se você pudesse me dizer como concluir o script, para que ele receba o nome de usuário em vez de $ uid.

obrigado

alfish
fonte

Respostas:

24

Você pode converter o script em um script de shell Drush .

Um script de shell drush é qualquer arquivo de script de shell Unix que tenha seu conjunto de bits "execute" (ou seja, via chmod +x myscript.drush) e que comece com uma linha específica:

    #!/usr/bin/env drush

ou

    #!/full/path/to/drush

Os scripts Drush são melhores que os scripts Bash pelos seguintes motivos:

  • Eles são escritos em PHP
  • Drush pode inicializar o site antes de executar o script

A seguir está o exemplo que você pode encontrar em 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();

 

Você pode tornar o script executável, para executá-lo com <script file> <parameters>onde <script name>está o nome do script e com <parameters>os parâmetros passados ​​para o script; se o script não for executável, você o chamará drush <script name> <parameters>.

kiamlaluno
fonte
As tags PHP não são necessárias?
AlxVallejo 24/06
Tanto quanto me lembro, você não usa tags PHP em scripts Drush.
kiamlaluno
17

Com drush php-eval, você pode executar seu script sem precisar salvá-lo em um arquivo primeiro:

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

Isso usa aspas aninhadas; portanto, para evitar uma bagunça, recomendo usar apenas aspas duplas "no código PHP.

tanius
fonte
13

Eu acho que você está olhando drush -d scr --uri=example.org sample_script.phppara executar sample_script.php.

Mike Gifford
fonte
8

Podemos usar drush php-script script_namepara extrair arquivos php no Drush.

Para obter ajuda relacionada ao Drush na execução de arquivos php, o Type Drush php-script --helplistará os comandos

Nota: Coloquei php scirpt na pasta raiz do Drupal

Bhanu Prakash Ryaga
fonte
5

É simples, você pode executar um script php drush scr ~/sample.php.

heshanlk
fonte
2

Na sua linha de comando, de qualquer lugar, execute:

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

Caso você já esteja em / path / to / drupal-installation, execute:

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

Caso você esteja ainda mais à frente em /path/to/drupal-installation/sites/youdomain.com, execute apenas:

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

seu arquivo 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
fonte
0

Observe que o db_resultfoi removido no Drupal 7. O código acima pode ser alterado para:

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

Se você quiser usar o nome de usuário em vez do uid, poderá obter o nome de usuário usando este:

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