Php betiği drush kullanarak nasıl yürütülür?


28

Ben Drush için yeniyim. Belirli bir kullanıcının yorumlarını kaldırmak için bu komut dosyasını nasıl çalıştırabilirim?

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

Ayrıca, betiği nasıl tamamlayacağımı söylerseniz $ uid yerine kullanıcı adını alır.

Teşekkürler

Yanıtlar:


24

Komut dosyasını bir Drush kabuk komut dosyasında dönüştürebilirsiniz .

Sarhoş bir kabuk betiği, "yürütme" bit kümesine (yani, üzerinden chmod +x myscript.drush) sahip olan ve belirli bir satırla başlayan herhangi bir Unix kabuk betiği dosyasıdır :

    #!/usr/bin/env drush

veya

    #!/full/path/to/drush

Drush komut dosyaları, aşağıdaki nedenlerden dolayı Bash komut dosyalarından daha iyidir:

  • PHP ile yazılmışlar
  • Drush betiği çalıştırmadan önce siteyi önyükleyebilir

Aşağıdaki helloword.script'te bulabileceğiniz örnek .

#!/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();

 

Komut dosyasını çalıştırılabilir hale getirebilir, böylece komut dosyası adının <script file> <parameters>nerede <script name>olduğu ile çalıştırabilirsiniz ve komut dosyasına <parameters>iletilen parametrelerdir; komut dosyası çalıştırılabilir değilse, onu çağırırsınız drush <script name> <parameters>.


PHP etiketlerine gerek yok mu?
AlxVallejo

Hatırladığım kadarıyla, Drush betiklerinde PHP etiketlerini kullanmıyorsunuz.
kiamlaluno

17

İle drush php-eval, komut dosyanızı önce bir dosyaya kaydetmenize gerek kalmadan çalıştırabilirsiniz :

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

Bu iç içe tırnak işaretleri kullanır, bu yüzden bir karışıklığı önlemek "için PHP kodu içinde yalnızca çift tırnak kullanmanızı öneririz .


13

drush -d scr --uri=example.org sample_script.phpÖrnek_script.php'yi yürütmek için bakıyorsunuz .


8

Biz kullanabilirsiniz drush php-script script_nameDrush içinde php dosyasını excute.

Drush ile ilgili php dosyaları yürütme konusunda yardım için Tür Drush php-script --helpsize komutları listeler

Not: Ben php scirpt Drupal kök klasörüne yerleştirdim


5

Bir php betiği tarafından çalıştırabilirsiniz basittir drush scr ~/sample.php.


2

Komut satırınızda, istediğiniz yerden çalıştırın:

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

Zaten / path / to / drupal kurulumunda olmanız durumunda, sadece şunu çalıştırın:

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

/Path/to/drupal-installation/sites/youdomain.com adresinde daha önce çalıştıysanız daha ileride olmanız durumunda:

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

script.php dosyanız:

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

Lütfen db_resultDrupal 7’de kaldırıldığını unutmayın . Yukarıdaki kod şu şekilde değiştirilebilir:

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

Kullanıcı adı yerine kullanıcı adı kullanmak istiyorsanız, kullanıcı adınızı şunu kullanarak alabilirsiniz:

$username = user_load($uid)->name;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.