it-swarm-vi.com

Làm thế nào để thực thi tập lệnh php bằng cách sử dụng drush?

Tôi mới đến Drush. Làm cách nào tôi có thể thực thi tập lệnh này để xóa nhận xét của một người dùng cụ thể?

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

Ngoài ra, điều đó sẽ rất tuyệt nếu bạn có thể cho tôi biết cách hoàn thành tập lệnh để nó có tên người dùng thay vì $ uid.

Cảm ơn

30
alfish

Bạn có thể chuyển đổi tập lệnh trong tập lệnh Drush Shell .

Tập lệnh Shell drush là bất kỳ tập lệnh Unix Shell nào có tập bit "thực thi" của nó (tức là, thông qua chmod +x myscript.drush) và bắt đầu bằng một dòng cụ thể:

    #!/usr/bin/env drush

hoặc là

    #!/full/path/to/drush

Các kịch bản Drush tốt hơn các kịch bản Bash vì các lý do sau:

  • Chúng được viết bằng PHP
  • Drush can bootstrap trang web trước khi chạy tập lệnh

Sau đây là ví dụ bạn có thể tìm thấy trên 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();

Bạn có thể làm cho tập lệnh có thể thực thi được, vì vậy bạn có thể thực thi nó bằng <script file> <parameters> Ở đâu <script name> là tên tập lệnh và <parameters> là các tham số được truyền cho tập lệnh; nếu tập lệnh không được thực thi, bạn gọi nó bằng drush <script name> <parameters>.

25
kiamlaluno

Với drush php-eval , bạn có thể chạy tập lệnh của mình mà không cần trước tiên phải lưu tập tin vào tệp:

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

Điều này sử dụng dấu ngoặc kép lồng nhau, vì vậy để tránh sự lộn xộn, tôi khuyên bạn chỉ nên sử dụng dấu ngoặc kép " trong mã PHP.

19
tanius

Tôi nghĩ rằng bạn đang nhìn vào drush -d scr --uri=example.org sample_script.php để thực thi sample_script.php.

13
Mike Gifford

Chúng tôi có thể sử dụng drush php-script script_name Để loại bỏ tệp php trong Drush.

Để được trợ giúp liên quan đến Drush để thực thi các tệp php Loại Drush php-script --help Sẽ liệt kê cho bạn các lệnh

Lưu ý: Tôi đã đặt php scirpt trong thư mục gốc của Drupal

8
Bhanu Prakash Ryaga

Thật đơn giản, bạn có thể chạy tập lệnh php bằng cách drush scr ~/sample.php.

5
heshanlk

Trên dòng lệnh của bạn, từ bất cứ đâu, hãy chạy:

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

Trong trường hợp bạn đã ở/path/to/drupal-install, hãy chạy:

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

Trong trường hợp bạn còn tiến xa hơn tại /path/to/drupal-installation/sites/youdomain.com thay vì chỉ chạy:

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

tập tin script.php của bạn:

<?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.
2
Francisco Luz

Xin lưu ý rằng db_result đã bị xóa trong Drupal 7. Mã trên có thể được thay đổi thành:

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

Nếu bạn muốn sử dụng tên người dùng thay vì uid thì bạn có thể lấy tên người dùng bằng cách này:

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