ड्रिप का उपयोग करके php स्क्रिप्ट कैसे निष्पादित करें?


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

आप स्क्रिप्ट को एक ड्रश शेल स्क्रिप्ट में बदल सकते हैं ।

एक ड्रश शेल स्क्रिप्ट किसी भी यूनिक्स शेल स्क्रिप्ट फ़ाइल है जिसमें इसकी "निष्पादित" बिट सेट (यानी, के माध्यम से chmod +x myscript.drush) है और यह एक विशिष्ट लाइन के साथ शुरू होती है:

    #!/usr/bin/env drush

या

    #!/full/path/to/drush

ड्रश स्क्रिप्ट निम्नलिखित कारणों से बैश स्क्रिप्ट से बेहतर हैं:

  • वे 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 टैग्स की जरूरत नहीं है?
अल्क्सवेल्जो

जहाँ तक मुझे याद है, आप 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.phpsample_script.php निष्पादित करने के लिए देख रहे हैं ।


8

हम drush php-script script_nameDrush में php file को excute करने के लिए उपयोग कर सकते हैं ।

PHP फ़ाइलों को निष्पादित करने के लिए Drush से संबंधित मदद के लिए, प्रकार Drush php-script --helpआपको आदेशों को सूचीबद्ध करेगा

नोट: मैंने Drupal के रूट फ़ोल्डर में php scirpt रखा है


5

यह सरल है आप द्वारा एक php स्क्रिप्ट चला सकते हैं drush scr ~/sample.php


2

अपनी कमांड लाइन पर, कहीं से भी दौड़ें:

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

मामले में आप पहले से ही / पथ / से / ड्रुपल-इंस्टॉलेशन बस चला रहे हैं:

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

यदि आप यूआईडी के बजाय उपयोगकर्ता नाम का उपयोग करना चाहते हैं तो आप इसका उपयोग करके उपयोगकर्ता नाम प्राप्त कर सकते हैं:

$username = user_load($uid)->name;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.