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の代わりにユーザー名を使用するようにスクリプトを完了する方法を教えていただければ、それは素晴らしいことです。

ありがとう

回答:


24

Drushシェルスクリプトでスクリプトを変換できます

ブラシシェルスクリプトは、「実行」ビットが設定された(つまり、経由でchmod +x myscript.drush)特定の行で始まるUnixシェルスクリプトファイルです。

    #!/usr/bin/env drush

または

    #!/full/path/to/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

私が思い出す限り、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コード内では二重引用符のみを使用することをお勧めします。



8

drush php-script script_nameDrushでphpファイルを実行するために使用できます。

PHPファイルを実行するためのDrushに関連するヘルプについては、Type Drush php-script --helpにコマンドが一覧表示されます

注:Drupalのルートフォルダーにphp scirptを配置しました



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;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.