環境
- レンタルサーバー: スターサーバー スタンダードプラン
- Drupal: 10.0.4
- PHP: 8.1.12
- Drupal 10の要件がPHP 8.1以上
本題
Drupalを使って構築された自サイトを諸事情で閉鎖させてから久しい今日この頃、ワシは疑似SSH環境下のComposerを使ったDrupal 10のインストールを行っていた。なんやかんやあって、スタートアップ画面の表示にまでこぎつけたが、予期せぬ問題に直面した。
どうやら、PHPのマルチバイト文字入力変換が有効になっているため、これを無効にする必要があるらしい。php.iniのmbstring.encoding_translationの設定を確認せよとのこと。
…確かワシは同じサーバーでDrupalのインストールを完了させたことがあったハズだし、php.iniも弄ってないハズ。というわけでとりあえずphp.iniを確認してみたところ、
[mbstring] mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = pass mbstring.http_output = pass mbstring.encoding_translation = Off mbstring.detect_order = auto mbstring.substitute_character = none
は?は???
太字で示したように、問題の設定項目がしっかりOffになっている。コレはワシが記述したものではなく、サーバー側での初期設定であるし、無効を表す信号としてはこの上なく最適である。しかし、それを確認して再読み込みを行っても「有効です」の一点張り。試しにOffではなくOnにしたり、記述自体を削除してリトライしても、「有効です」の一点張り。あまりにも変わらな過ぎて結果のスクリーンショットも貼っていないが、本当に何も結果が変わらない。あまりにも理不尽過ぎる上に似たような症状に出くわしている人が多くなかったせいか、情報集めに時間がかかってしまった。
結論を言うと、設定項目の入力内容が’Off‘の場合、該当機能が無効であることを伝えられず、無効にしていないと判断されてしまう。となると、無効であることを伝えるための入力内容をどうすればいいのか。それは、’0‘である。具体的には、該当の行を以下のように書き換える。
mbstring.encoding_translation = Off
コレを、↓
mbstring.encoding_translation = 0
コレに書き換える。
設定画面を再びリロードすると…
要件をすべて満たした場合、データベースのセットアップに移ることができる。ここから先は特に不具合もなくインストールが完了した。それにしても、データベースが余っているとレンタルサーバーでも色々実験が出来て助かる。
phpinfo()でも設定項目を確認したが、上述での入力’0’は’Off’と等価のようで、Local Valueでの値も’Off’となっている。
補足
php.iniとは、サーバー上で動作するphpの環境設定ファイルである。多くのレンタルサーバーにおいてはユーザー定義のphp.iniが設定可能になっており、FTPでアクセスできる範囲内にphp.iniが配置されていたり、サーバーのコントロールパネルからの設定変更や直接編集が出来るようになっている。スターサーバーの場合、上述の入力内容の変更(≠直接編集)が’On’及び’Off’の二択であるため、直接編集が必須。
参考リンク(英語)
今回の件とは違う作業で同じ不具合に出くわした例とその解決方法。そもそもこの質問がされなかったらこの問題も解決しなかった。Drupal関連の情報探しに行き詰った場合は、公式サイトからの検索を強く推奨。
あとがき
本当はComposerについても書きたいところだけど、またの機会に。なお、今回インストールを行ったサイトは飽くまでもオタメシ/実験用で、一般公開する予定はないのであしからず。
ワシのブログってこういう問題の解決方法を載せるために作ってる側面が強いんだけど、問題解決系の記事を書くのがかなり久しぶりなんだよなぁって。今回の件は情報が少ない、ワシも酷く困った、ということで記事を書く意欲が刺激されたわけだ。
ということでまたね!
コメント