Як виконати скрипт php за допомогою drush?


28

Я новачок Друша. Як я можу виконати цей скрипт, щоб видалити коментарі конкретного користувача?

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

Крім того, це було б чудово, якби ви могли сказати мені, як виконати сценарій, щоб він взяв ім'я користувача замість $ uid.

Спасибі

Відповіді:


24

Ви можете конвертувати скрипт у сценарій оболонки Drush .

Скрипт оболонки друшля - це будь-який файл сценарію оболонки Unix, у якого встановлений біт "Execute" (тобто через chmod +x myscript.drush) і який починається з певного рядка:

    #!/usr/bin/env drush

або

    #!/full/path/to/drush

Друковані сценарії кращі за сценарії Bash з наступних причин:

  • Вони написані на PHP
  • Друш може завантажувати сайт перед запуском сценарію

Далі наведено приклад, який ви можете знайти на 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();

 

Ви можете зробити сценарій виконуваним, так що ви можете виконати його, <script file> <parameters>де <script name>є ім'ям скрипта, і чи <parameters>є параметри, передані сценарію; якщо скрипт не виконується, ви викликаєте його drush <script name> <parameters>.


Не потрібні теги PHP?
AlxVallejo

Наскільки я пам'ятаю, ви не використовуєте теги PHP у сценаріях Drush.
kiamlaluno

17

С drush php-eval, ви можете запустити свій скрипт, не спочатку зберігаючи його у файлі:

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

Тут використовуються вкладені лапки, тому для запобігання безладу рекомендую використовувати лише подвійні лапки "в коді PHP.



8

Ми можемо використовувати drush php-script script_nameдля виправдання файлу php в Друші.

Для довідки, пов’язаної з Drush для виконання файлів php, Type Drush php-script --helpвиведе список команд

Примітка: я розмістив php scirpt в кореневій папці Drupal



2

У командному рядку з будь-якого місця запустіть:

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

Якщо ви вже перебуваєте у / path / to / drupal-installation, просто запустіть:

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

У випадку, якщо ви ще більше вперед на /path/to/drupal-installation/sites/youdomain.com, ніж просто запустіть:

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

файл 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.

0

Зверніть увагу, що db_resultфайл видалено в Drupal 7. Наведений вище код можна змінити на:

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

Якщо ви хочете використовувати ім'я користувача замість uid, то ви можете отримати ім'я користувача, використовуючи це:

$username = user_load($uid)->name;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.