highlight.js

2017年7月8日土曜日

WordPressをApacheモジュールPHPセーフモードで動かした時の問題と対策

WordPressをApacheモジュールPHPセーフモードで動作させた場合、以下の問題が発生する。

  • ファイルアップロード
  • プラグイン自動アップデート(アップグレード)
  • プラグイン新規インストール
  • テーマ自動アップデート(アップグレード)
  • コアアップデート(アップグレード)

環境例

  • CentOS 6.2
  • Apache 2.2
  • PHP 5.3
  • WordPress 4.8

問題

厳密に言うと、WordPressファイルのユーザーとPHPを実行するユーザーが異なる場合、問題が発生する。

例えば、レンタルサーバーにFTPでWordPressのファイル群をアップロードする。
この時、ファイルのユーザーは当然のことながらFTPユーザーとなる。
その後、wp-config.phpを作成し基本設定。wp-admin/install.phpでインストール。
ここまでは問題ないが、ログイン後、ファイルアップロードすると以下のエラーが出る。


これは、WordPressを実行するApacheユーザーがFTPユーザーディレクトリに対し、ファイルを作成しようとし、書き込み権限(パーミッション)がないためにエラーとなっている。

これと同じ理由で、プラグインなどがインストールやアップデートできない。
権限の問題なので、権限をつければもちろん動作する。
例えば、ファイルアップロードであれば、wp-contentやuploadsなどにApacheが書き込める権限をつければ動作する。

しかし、WordPressの設定によっては、ディレクトリの作成方法が異なったり、そもそも、いつ、どこに、どんなディレクトリやファイルを作成するかなんてわからない。
プログラムを読めばわかると思うが、現実的ではない。

対策

以下htaccessをwp-adminに配下に設置し、WordPressをCGIとして動作させる。
(suEXECとしてCGIが動作することが前提。)

<FilesMatch "\.php$">
    AddHandler php-script .php
    Options +ExecCGI
</FilesMatch>

これで、WordPressを実行するユーザーとファイルのユーザーが同一になり、問題は解決する。

参考

0 件のコメント:

コメントを投稿