Как выполнить PHP-скрипт, используя Drush?

28

Я новичок в Drush. Как я могу выполнить этот скрипт, чтобы удалить комментарии конкретного пользователя?

$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.

Благодарность

alfish
источник

Ответы:

24

Вы можете преобразовать сценарий в сценарий оболочки Drush .

Сценарий оболочки drush - это любой файл сценария оболочки Unix, в котором установлен бит «execute» (т. Е. Via chmod +x myscript.drush) и который начинается с определенной строки:

    #!/usr/bin/env drush

или

    #!/full/path/to/drush

Сценарии Drush лучше сценариев Bash по следующим причинам:

  • Они написаны на PHP
  • Drush может загрузить сайт перед запуском скрипта

Ниже приведен пример, который вы можете найти на 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.

tanius
источник
13

Я думаю, что вы смотрите, drush -d scr --uri=example.org sample_script.phpчтобы выполнить sample_script.php.

Майк Гиффорд
источник
8

Мы можем использовать drush php-script script_nameдля извинения php-файл в Drush.

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

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

Бхану Пракаш Ряга
источник
5

Это просто, вы можете запустить скрипт PHP drush scr ~/sample.php.

heshanlk
источник
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;
rashidkhan
источник