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 대신 username을 사용하도록 스크립트를 완성하는 방법을 알려 주면 좋을 것입니다.

감사

답변:


24

스크립트를 Drush 쉘 스크립트 로 변환 할 수 있습니다 .

drush shell 스크립트는 "execute"비트가 설정되고 (예 : via chmod +x myscript.drush) 특정 행으로 시작 하는 Unix 쉘 스크립트 파일입니다 .

    #!/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

내가 기억하는 한, 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 파일을 추출 하는 데 사용할 수 있습니다 .

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

이미 / 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로 변경할 수 있습니다 드루팔 7 위의 코드에서 제거되었습니다 :

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

uid 대신 username을 사용하려면 다음을 사용하여 username을 얻을 수 있습니다.

$username = user_load($uid)->name;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.