如何使用Drush执行php脚本?


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,那将是很棒的。

谢谢

Answers:


24

您可以在Drush Shell脚本中转换脚本

drush shell脚本是任何设置了“执行”位(即,通过chmod +x myscript.drush)并以特定行开头的Unix shell脚本文件:

    #!/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>where <script name><parameters>传递给脚本的参数来执行脚本。如果脚本不是可执行的,请使用调用它drush <script name> <parameters>


是否不需要PHP标签?
AlxVallejo 2014年

据我所知,您没有在Drush脚本中使用PHP标记。
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代码中仅使用双引号。


13

我认为您正在考虑drush -d scr --uri=example.org sample_script.php执行sample_script.php。


8

我们可以用来drush php-script script_name在Drush中执行php文件。

对于与Drush有关的执行php文件的帮助,Type Drush php-script --help将列出您的命令

注意:我已经将PHP scirpt放置在Drupal的根文件夹中


5

很简单,您可以通过运行php脚本drush scr ~/sample.php


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_resultDrupal 7中已将删除。上面的代码可以更改为:

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

如果要使用用户名而不是uid,则可以使用以下命令获取用户名:

$username = user_load($uid)->name;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.