1
0

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 1 year has passed since last update.

さくらのレンタルサーバーでPHPを使用する際の注意点

Posted at

はじめに

さくらのレンタルサーバー上で動いているWordPressの保守作業時にエラーを多発させてその対処をしていたのですが、その中で割と癖が強いと感じる要素があったのでメモとして残そうと思います。

デフォルトのPHP用のメモリ上限が貧弱

ある処理をさせたときに

「このサイトで重大なエラーが発生しました。対応手順については、サイト管理者のメール受信ボックスを確認してください。」

と表示され、より詳細を確認するためにwp-config.php内で

define('WP_DEBUG', true);

と設定したところFatal error: Allowed memory size of 134217728 bytes exhaustedと表示されました。

つまりデフォルトではPHP用のメモリの上限は128MBということで、プラグインの組み合わせや処理の中身によっては足りません。

php.iniの挙動の癖がかなり強い

というわけでメモリの上限の設定を変更するわけですが、方法としてはwww内にphp.iniを作成し

memory_limit = 512M

と記載すればOKです。
そのphp.iniはコントロールパネル上に「スクリプト設定」->「php.ini設定」という項目があるのでそこから作成できます。

が、そこでphp.iniを作成して上記のメモリ上限の設定のみを記述するとWPのテーマによってはログインすらできないほどに壊れます。

その際に表示されるメッセージが以下のようなものです。

Warning: Cannot modify header information - 
headers already sent by (output started at (中略)functions.php:***) 
in /home/(中略)/pluggable.php on line ***

functions.php内に余計な空白を入れたときなどによく出るエラーですが特に何も編集はしていないので疑わしいものはphp.iniしかありません。

そこで「もともと存在しなかったのだからphp.iniを削除しよう」としてもなんと元に戻りません。

解決方法

php.ini内に

output_buffering = On

の記述を追加する。

意味合いとしては「Warningを画面に出さない」ということです。あくまでErrorではなくWarningなので出力さえしなければ普通に動きます。WPのテーマによってはそれを前提に動いているようです(それはそれでどうかと思いますが)。

逆に何故今まで動いていたのか

web.iniが無い場合、デフォルトではoutput_buffering = Onになっている?

何故web.iniを作っただけで動かなくなったのか

web.iniをコンパネで作成した場合、書いていない情報はデフォルトを反映ではなく場合によってはOFFとして扱われる?

何故web.iniを削除しても直らなかったのか

web.iniをコンパネで作成した場合、削除したとしてもデフォルトの設定を反映ではなくwww内しか参照しないようになる?

おわりに

なんとか対処はできましたが正直納得できていない挙動が多いです。十分なパターンを試したわけではないので憶測の域を出ないところもおそらく多いです。同様のトラブルが発生した際に参考にしていただければと思います。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?