0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Drupal] DrushでPHPスクリプトを実行する

Posted at

今回はdrushでPHPスクリプトを実行する方法を紹介します。

drush scrを使う方法

ある程度まとまった長さのスクリプトを実行するときは、スクリプトファイルを書いてからdrush scrで実行します。

使い方

  • スクリプトファイル(phpファイル)を作成してサーバーに設置(設置場所はどこでもいい)
<?php

use Drupal\node\Entity\Node;

echo '更新したいノードのNIDを入力してください。';
$nid = rtrim(fgets(STDIN));

$node = Node::load($nid);
$node->set('field_a', 'hello');
$node->save();

echo 'NID' . $nid . 'のノードの更新が完了しました。' . PHP_EOL;

  • drush scrを実行
drush scr [スクリプトのパス]

実行場所について

スクリプトの置き場所はどこでも大丈夫ですが、Drupalディレクトリ外でdrush scrを実行すると名前空間のオートロードが効かなくなる(今回のように名前空間で指定したクラスが読み込めなくなる)ので注意です。

引数の取得方法について

ファイル名の他に追加で引数を指定したいときは$_SERVER['argv'])で取得できます。

<?php

use Drupal\node\Entity\Node;

// コマンドの引数からNIDを取得.
$nid = $_SERVER['argv'][6];
$node = Node::load($nid);
$node->set('field_a', 'hello');
$node->save();

echo 'NID' . $nid . 'のノードの更新が完了しました。' . PHP_EOL;

この場合のコマンド

drush scr [スクリプトのパス] [NID]

drush phpを使う方法

ほんのちょっと値をチェックしたり変更させたいときはdrush phpの方が便利です。

drush php

// シェルが開く
Psy Shell v0.10.6 (PHP 7.3.24-3+ubuntu18.04.1+deb.sury.org+1 — cli) by Justin Hileman
test (Drupal 9.1.4)
>>> \Drupal\node\Entity\Node::load(4)->set('field_a', 'konnichiwa')->save();
=> 2
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?