アイキャッチ画像: デスクの上でパソコンを使用している

本日は Drupal (ドルーパル)の「 PHP filter 」というモジュールをご紹介できればと思います。

PHP filter モジュールは Drupal のコンテンツ(=ノード)の本文部分に生の PHP コードが書けるようになるモジュールです。 Drupal をセットアップすればデフォルトで用意されている Filtered HTML 、 Full HTML 、 Plain text などのフォーマットに加える形で、「 PHP code 」というフォーマットを提供してくれて、それを選択すると動作する PHP コードが書けるようになります。

Drupal 7 の場合はコアに含まれているため、 Drupal コアをセットアップすれば別途インストールする必要はありません。 管理画面もしくは Drush 経由で有効化するだけですぐに使いはじめることができます。 Drupal 8 の場合は、 2014 年 10 月時点ではコアから切り離されコントリビュートモジュール化される見込みです。

以下、使い方をかんたんに見ていきましょう。

使い方

  1. インストール
  2. 利用権限を付与
  3. 実際に PHP コードを書く

1. インストール

上述のとおり、 Drupal 7 の場合はコアに組み込みとなっているので別途ダウンロードする必要はありません。 モジュールの管理画面から有効化しましょう。 管理者としてログインしてモジュールの管理ページ( /admin/modules )を開いたら、「 PHP filter 」という項目を探します。 その隣にあるチェックボックスにチェックを入れて「設定を保存」(日本語化されている場合)をクリックすると有効化は完了です。

PHP filter の Drupal の中での名称は php なので、 Drush を使う場合は次のコマンドを実行すればよいでしょう。

$ drush en php

2. 利用権限を付与

モジュールを有効化しただけでは PHP filter を使える状態になっていないため権限の設定を行います。

管理画面のテキストフォーマットの管理ページ( /admin/config/content/formats )を開いたら、「 PHP code 」という項目を探して、その行にある「設定」リンクをクリックします。

PHP コードの記述権限を与えたい役割(ユーザロール)を設定できるページが開くので、 PHP コードを記述させたい役割のみにチェックを入れて「設定を保存」をクリックして保存します。

3. 実際に PHP コードを書く

以上の手続きで PHP コードが書けるようになったので、実際に PHP コードを埋め込むコンテンツを書いてみます。

権限を与えた役割を持つユーザでログインし、コンテンツ(=ノード)の新規作成ページ( /node/add )を開きます。 適当にコンテンツタイプを選び(デフォルトでは Article と Basic Page があるかと思いますが、その中から適当に選んで)、実際の作成フォームのページを開きましょう。

本文( Body )の部分の下の方にフォーマット選択のセレクトボックスがあり、その中に「 PHP code 」が含まれているかと思います。 それを選択し、本文には適当に PHP コードを記述します。

あとは「保存」をクリックすれば、 PHP コードのあるコンテンツの作成は完了です。

確認のため、コンテンツのページを開いてみましょう。

記述した PHP コードが問題なく動いていることが確認できるのではないかと思います。

ちなみに、記述できるコードの範囲ですが、 Drupal の立ち上げ処理がひととおり終わった後にこの PHP コードが読まれる形になるので Drupal が提供している API も利用することが可能です。

以上です。

おわりに

いかがだったでしょうか?

コンテンツの本文のところで任意の PHP コードを実行できる PHP filter モジュールをご紹介しました。 PHP filter にはこの他にも「ブロックの表示条件を PHP で設定できる機能」なども持っているので、ブロックの表示条件を細かく設定したい場合なんかにも便利です。

ただ、任意の PHP コードが実行できるということは、 1) 悪意のあるユーザが利用した場合、 2) 悪意のないユーザが間違って問題のあるコードを記述した場合、を考えると大きなセキュリティリスクのもとともなるので、権限設定を適切に行った上で PHP をよく理解したユーザだけが利用するように、細心の注意が必要です。

Drupal 7 の場合はコアに含まれていてすぐに使いはじめられますし、正しく使えば非常に便利なモジュールなので、知らなかったぞという方はぜひ試して活用してみていただければと思います。