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


28

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ó lấy tên người dùng thay vì $ uid.

Cảm ơn

Câu trả lời:


24

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

Tập lệnh shell drush là bất kỳ tập lệnh shell Unix nào có tập bit "thực thi" (nghĩa 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 có thể tự khởi động 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ó với tên tập lệnh <script file> <parameters>ở đâu <script name><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>.


Có phải thẻ PHP không cần thiết?
AlxVallejo

Theo như tôi nhớ, bạn không sử dụng các thẻ PHP trong các tập lệnh Drush.
kiamlaluno

17

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

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 để ngăn chặn một mớ hỗn độn, tôi khuyên bạn chỉ nên sử dụng dấu ngoặc kép "trong mã PHP.


13

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


8

Chúng ta có thể sử dụng drush php-script script_name để loại bỏ tập tin 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


5

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


2

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.

0

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;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.