วิธีการรันสคริปต์ 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

ขอบคุณ

คำตอบ:


24

คุณสามารถแปลงสคริปต์ในสคริปต์ Drush เปลือก

สคริปต์ drush shell คือไฟล์สคริปต์เชลล์ Unix ใด ๆ ที่มีชุดบิต "execute" (เช่นผ่าน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 เท่านั้น



8

เราสามารถใช้drush php-script script_nameexcute php file ใน Drush

สำหรับความช่วยเหลือเกี่ยวกับ 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;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.