概要
Drupal の一部のモジュールには、PHP のファイルシステム関数である mkdir() や copy() などを使用し、ディレクトリの自動作成やファイルのコピーなどを行うものがあります。 例えば、Drupal 5 のデフォルトテーマである「Garland」で、ウェブ上から配色を変更するために使用される「color モジュール」がこれに該当します。
これら一部のファイルシステム関数は、PHP からディレクトリ操作などを自在に行えるために大変便利な関数である反面、一般に多くの人が利用するであろう「共有サーバ」では、その自由度の高さから常にセキュリティ上の危険性がついて回ります。
このため、PHP がサーバモジュール版で、なおかつセーフモードで動作している場合、これら一部の関数は、セキュリティ上の観点から一定のチェックを行い、そのチェックにパスした場合にのみ使用できるという制限があります。
この「チェック」に当たる部分はサーバ側の設定に依存し、ユーザ側から変更することができません。 このため PHP がサーバモジュール版のセーフモードで動作し、さらにサーバ側での設定が一定の条件に合致する場合、前述のような一部のモジュールが正常に動作しないという問題が発生します。
確認方法
実際に自身の使用しているサーバがこの問題に該当する環境かどうかは、
管理セクション > ログ > 現状報告 > PHP ( admin/logs/status/php )
で見ることのできる PHP の設定値から判断することもできますが、それには PHP の設定に関する知識が必要となり、専門知識を持たない一般のユーザには判断が困難です。
そこで、最も簡単な確認方法である「問題となる可能性のあるモジュールを実際に動作させてみる」ことで、この問題が発生するかどうかを確認してください。
手順は以下のとおりです。
-
管理セクション > サイトの構築 > テーマ > 設定 > garland
(admin/build/themes/settings/garland) にアクセスします。 -
「カラーセット」を適当なものに変更し、「 設定の保存」ボタンを押します。
判定
-
上記作業の結果、以下の画像のように、エラーメッセージが表示されず配色が変更されれば、この問題は発生しない環境です。
-
もし、以下の画像のように、
warning: mkdir() [function.mkdir]: SAFE MODE Restriction in effect. The script whose uid is XXX is not allowed to access /path/to/drupal/color owned by uid XXX in /path/to/drupal/modules/color/color.module on line XXX.
というエラーメッセージが表示され、配色が変更されない場合は、残念ながらこの問題が発生する環境です。 (※ メッセージ内の /path/to/drupal や XXX は環境によって異なります)
参考までに、このエラーは「color ディレクトリの所有者とスクリプトの所有者が一致しないのでアクセスできません」といった内容です。 「warning: copy()」以下のエラーは、同様か、あるいはファイルのコピーに失敗した結果として操作対象のファイルが存在しないために発生しているエラーですので無視して結構です。
問題への対応
この問題への対応には、いくつかの選択肢があります。
-
PHP をサーバモジュール版ではなく CGI 版で動作させる
一部のホスティングプロバイダでは、PHP の動作をサーバモジュール版と CGI 版の2つから選べる場合があります。 有名なところでは XREA.COM がこれに該当します。
このようなサーバの場合、セーフモードの制限がない CGI 版で動作させることにより問題が解決します。 -
ホスティングプロバイダに対応を求める
ホスティングプロバイダに懇願しセーフモードの設定を緩めてもらう、あるいは、個別に CGI 版を使用できるようにしてもらうなどが考えられます。 ただし、実際に対応してもらえる可能性は、きわめて低いかもしれません。
-
ホスティングプロバイダを変更する
どうしても現在のホスティングプロバイダでなければならない理由がある場合を除き、問題の起こらないホスティングプロバイダに変更してしまうのも妥当な対策かもしれません。
-
正常に動作しない Drupal モジュールのロジックを変更する
自身に PHP で簡単なスクリプトを書ける程度の知識があれば、正常に動作しないモジュールのソースコードを改変して、このような問題を回避できるようにロジックを変更することも可能です。
興味と知識のある方は、是非チャレンジしてみてください。 -
当面、正常に動作しない Drupal モジュールの動作は諦める
上記 1~4 のどれも無理な場合、モジュール側で対策が施されるのを待つしかありません。
本家 drupal.org にも、この問題に関連するバグ報告や要望が投稿されていますので、将来的には改善される可能性もあります。 また、当 Drupal Japan でも、状況によっては著者自身が対策版を提供する可能性もあります。
どちらにしても、この問題によって利用できない機能は Drupal のごく一部です。 当面は問題の発生する機能の利用を諦め、その他の部分で Drupal を楽しんでください。
サーバ別の対策
ユーザ側で対策を取れるサーバで、対応策の確認が取れているものについて個別に説明します。 なお、2007/02 時点で確認の取れているサーバは残念ながら皆無に等しいため、暫定的に以下に記載しています。 今後は情報が得られ次第、別ページを作成し、順次掲載してゆく予定です。
-
XREA.COM
PHP を CGI 版で動作させることにより対応できます。
-
Drupal をインストールしたディレクトリにある .htaccess をテキストエディタで開き、以下の《 おまじない 》を追加してください。
なお、公式日本語リソースキットに同梱の .htaccess を使用している場合は、行頭にコメント記号が付加された状態で記入済みです。 行頭のコメント記号を削除し、以下と同様になるようにしてください。# magic word for xrea.com <Files index.php> AddHandler application/x-httpd-phpcgi .php </Files>
-
上記と同じディレクトリに、以下の《 おまじない 》を記入したファイルを php.ini という名前で作成してください。
; magic word for mbstring mbstring.language = neutral mbstring.http_input = pass mbstring.http_output = pass mbstring.encoding_translation = off mbstring.func_overload = 0 mbstring.internal_encoding = UTF-8
-
files ディレクトリの下に color というディレクトリが存在している場合は削除してください。
-
前述の確認方法を再度試し、問題が発生しなくなったことを確認できれば完了です。
-