サーバーの設定に起因する不可思議な挙動
サーバーの設定、特にPHPのセッティングに起因する不具合をいくつか紹介したいと思います。
PHPのセッティングはphp.ini という設定ファイルを編集することで行なわれます。VPSや専用サーバーなどは当然自分でセッティングを行なわなくてはいけませんが、安価なホスティングサービスではどうでしょうか。
いわゆる共用サーバーと呼ばれるホスティングサービスでは、そのサーバー標準のphp.ini が設定されており、「通常の使用」では問題が無いようになっていると考えられます。しかし、この「通常の使用」というのが、どこまでの使用を表しているのかは各サービス会社ごとに見解は違うようです。ですので、PHPが利用できる、WordPress が使えると書いてあっても、初期設定のままネットショップを構築できるかどうかはやって見ないと分からないわけです。
そこで、日頃皆さまからいただいています貴重な情報をもとに、php.ini の設定に起因する不具合をいくつか紹介させていただこうと思います。
ほとんどの共用サーバーでは、ユーザー専用のphp.ini が設置できたり、htaccess である程度PHP の設定を変更できますので、以下の症状が出るようでしたら、まずはphpinfo を確認して、おかしい所が有ったら設定を変更してみてください。
PHPの設定に起因する不具合
session.auto_start はOn にしない
Welcart は、セッションIDを制御し、さらにセッションスタートのタイミングも計っています。session.auto_start がOn になっていると誤動作を起こします。幸いどのホスティングもこのオプションは初期値のままOff になっているのでまず心配は要らないと思います。VPS などでご自分でphp.ini を設定されている場合は確認してみると良いと思います。
このときの主な症状は次の通りです。
- カートページの商品がしばしば空になってしまう
- カートページから次のお客様情報ページに遷移できず必ずトップページへ戻ってしまう
- 管理パネルの受注リストまたは会員リスト閲覧中に、データベースエラーがしばしば表示される
session.save_path は的確に
session.save_handler がfiles の場合、session.save_path を間違えると、セッションが利用できなくなったり動作が不安定になったりします。問題なのは、初期設定のままのパスで利用したにもかかわらずセッションが正常に動作してくれないホスティングサービスが実在するということです。しかもこのときの症状は、特にエラーを出す事も無く、一見まともに動いているように見えるので厄介です。
このときの主な症状は次の通りです。
- カートページ遷移中に時々トップページへ戻ってしまう
- 決済方法に限らず、決済が時々失敗する
- 管理パネルの受注リストまたは会員リスト閲覧中に、データベースエラーが時々表示される
この「時々」というのが曲者です。良く観察しないと分からない場合があります。
プログラマーであれば、セッションが確実に動作しているかどうかのテストはできるでしょうが、そうでない場合判断は難しいかもしれません。前もってサーバー会社にセッションを利用する時の注意点を確認しておくと良いかと思います。
mbstring.encoding_translation はOn にしない
mbstring.internal_encoding が EUC となっている時、このスイッチを On にすると、文字化けが発生して正常に動作しません。こちらも使用する文字などで症状が出たり出なかったりするので注意です。
このときの主な症状は次の通りです。
- Welcart の各種設定が時々(特定の処理で)壊れてしまう
- バージョンによってはWordPress にログインできなくなってしまう
WordPress にログインできなくなってしまうのは、Welcart の設定データが壊れてしまっているからです。v1.0.9 からはこれが原因でログインできなくなることはなくなりました。
mbstring の設定はいろいろ考えられますが、WordPress を利用する場合はほとんど初期状態のままで大丈夫なようです。何も設定していないときのphpinfo() の表示は次のようになります。
mbstring.detect_order no value
mbstring.encoding_translation Off
mbstring.func_overload 0
mbstring.http_input pass
mbstring.http_output pass
mbstring.internal_encoding no value
mbstring.language neutral
mbstring.script_encoding no value
mbstring.strict_detection Off
mbstring.substitute_character no value
memory_limit の適正値とは
一回のアクセスでphp が利用できるメモリーの最大値です。
もしこの制限によってメモリーが足りなくなってしまった時の主な症状は次の通りです。
- 画面が真っ白になってしまう
- 大きな画像(メディア)をアップロードしようとするとエラーが出る
- その他、決まった場所で原因不明なエラーが出る(または表示されない)
メモリーの使用量は環境によって大きく変ってきます。もっとも影響が大きいのは商品点数です。その他インストールしているプラグインの数や、サーバーにインストールされているPHPのエクステンションも関わってくると考えています。設定の目安としましては、商品点数2,000 以内であれば、32M~64Mくらいで大体まかなえると思います。ただ、ホスティングによってはいくらこの値を上げてもapache の方で制限されている場合もありますので、memory_limit の値はいくつまでが有効なのかをサーバー会社に確認すると良いかと思います。
アクセスが集中してきますと、トータルのメモリーがオーバーフローする場合が出てきます。込み合う時間帯にサーバーが不安定になっていると感じたらエラーログを確認してみてください。オーバーフローしているようでしたらお引越しのタイミングとなります。ただ、スパムという事もありますのでアクセスログも合せてチェックする必要があるかと思います。
最近、welcart.com でもアクセスが集中する時間帯で、サーバーが不安定になってアクセスし辛いときが時々有ります。オーバーフローを確認していますのでサーバー移行を考えています。皆さまにはご迷惑をおかけしておりますが、サポート記事をもう少し充実させてサーバー移行を計画しておりますので、今しばらくご不便をおかけするかと思います。何卒よろしくお願いいたします。