Bagaimana cara mengeksekusi skrip php menggunakan drush?

28

Saya baru mengenal Drush. Bagaimana saya bisa menjalankan skrip ini untuk menghapus komentar dari pengguna tertentu?

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

Juga, itu akan bagus jika Anda bisa memberi tahu saya cara menyelesaikan skrip sehingga dibutuhkan nama pengguna alih-alih $ uid.

Terima kasih

alfish
sumber

Jawaban:

24

Anda dapat mengonversi skrip dalam skrip Drush shell .

Skrip shell drush adalah file skrip Unix shell yang memiliki set bit "eksekusi" (yaitu, via chmod +x myscript.drush) dan yang dimulai dengan baris tertentu:

    #!/usr/bin/env drush

atau

    #!/full/path/to/drush

Skrip Drush lebih baik daripada skrip Bash karena alasan berikut:

  • Mereka ditulis dalam PHP
  • Drush dapat mem-bootstrap situs sebelum menjalankan skrip

Berikut ini adalah contoh yang dapat Anda temukan di 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();

 

Anda dapat membuat skrip dapat dieksekusi, sehingga Anda dapat mengeksekusinya dengan di <script file> <parameters>mana <script name>nama skrip, dan <parameters>merupakan parameter yang diteruskan ke skrip; jika skrip tidak dapat dieksekusi, Anda menyebutnya dengan drush <script name> <parameters>.

kiamlaluno
sumber
Apakah tag PHP tidak diperlukan?
AlxVallejo
Sejauh yang saya ingat, Anda tidak menggunakan tag PHP di skrip Drush.
kiamlaluno
17

Dengan drush php-eval, Anda dapat menjalankan skrip tanpa harus menyimpannya terlebih dahulu di 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);
  }
'

Ini menggunakan tanda kutip bersarang, jadi untuk mencegah kekacauan saya sarankan untuk menggunakan hanya tanda kutip ganda "dalam kode PHP.

tanius
sumber
13

Saya pikir Anda sedang mencari drush -d scr --uri=example.org sample_script.phpuntuk menjalankan sample_script.php.

Mike Gifford
sumber
8

Kita dapat menggunakan drush php-script script_nameuntuk mengeksekusi file php di Drush.

Untuk bantuan yang terkait dengan Drush untuk mengeksekusi file php Ketik Drush php-script --helpakan daftar Anda perintah

Catatan: Saya telah menempatkan php scirpt di folder root Drupal

Bhanu Prakash Ryaga
sumber
5

Sederhana saja, Anda bisa menjalankan skrip php dengan drush scr ~/sample.php.

heshanlk
sumber
2

Di baris perintah Anda, dari mana saja, jalankan:

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

Jika Anda sudah di / path / ke / drupal-instalasi jalankan saja:

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

Jika Anda lebih maju di /path/to/drupal-installation/sites/youdomain.com daripada hanya menjalankan:

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

file script.php Anda:

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

Harap dicatat bahwa db_resulttelah dihapus di Drupal 7. Kode di atas dapat diubah menjadi:

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

Jika Anda ingin menggunakan nama pengguna dan bukan uid maka Anda bisa mendapatkan nama pengguna menggunakan ini:

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