コメントで出るエラーを直してみた

この記事は約6分で読めます。

しばらく前から、ママさんのブログの調子が悪かった。

何がおかしいって、コメントをフォームに入力して送信ボタンを押すと、500 Internal Server Errorになるのだ。

うちは共用のレンタルサーバを使ってるんだけど、実はうずらのサイトもOasisの公式もママさんのサイトも、ドメイン名が違うけど同じサーバです。
ママさんのサイトはXOOPSというCMS(コンテンツ管理システム)を使って構築してあるんだけど、Wordpress MEのモジュールをXOOPSに組み込んでブログ機能を実現している。

XOOPS/WordpressはPHP言語で書かれている。PHPのエラーなら、ブログモジュールのエラーが出ている箇所にスタブコードを挟むなり、XOOPSをデバッグモードにするなりして問題が把握できるのだが、500エラーというのはWebサーバ(Apache)の内部エラーで、CGIなどのプログラムがうまく動いていないときに発生するのである。
この場合、Apacheのエラーログを見れば問題は一発で分かるのだが、切ないことに利用しているサービスではアクセスログは開示されているのにエラーログは見ることができない。ひどいw

同じサーバに、まったく同じバージョンのWordpress MEを動かしているんだけど、そっちではエラーが出ない。これがヒントに違いない。

仕方が無いので、ディレクトリやファイルの属性も全部確認して、ファイルも全部壊れていないものをアップロードしなおした。しかし改善せず。

最近、使ってるレンタルサーバのPHPのバージョンが上がったので、そのせいかもしれないと思い出した。このとき、PHPのバージョン以外にも色々いじられたっぽいのだ。
まず、777のパーミッションに設定されたディレクトリの下にCGIを置くと500エラーになる。755だと動く。前はどっちでも動いたんだけどね。何か変えたなこれは。

だんだん深みにハマる。

めんどくさいけどXOOPSのバージョンを上げることにした。
ママさんが使ってたXOOPSのバージョンは2.0.13。こいつを最新版にする方法を検索したら、激めんどくさいことが判明w
備忘録として、ここに書いておく。

  1. 2.0.13→2.0.14のアップグレードパッケージを適用する
  2. 2.0.14→2.0.15のアップグレードパッケージを適用する
  3. 2.0.15→2.0.16aのアップグレードパッケージを適用する
  4. 2.0.16a→XOOPS Cube Legacy 2.1.3へのアップグレードを行う

古いアップグレードパッケージは、公式サイトからもリンク切れで、探すのにちょっと手間取った。
最後の部分は、さらに面倒くさいw

  1. XOOPS 2.0.16aになっていることを確認する(管理画面に書いてある)
  2. 使っていたモジュールが全部XOOPS Cube Legacy互換かどうかチェックし、モジュールの最新版かパッチを入手しておく
  3. 使っていたモジュールが互換性のためのシステムモジュールが必要かどうかチェックし、必要ならダウンロードする
  4. XOOPS管理メニューから、テーマをdefaultに戻す
  5. XOOPS管理メニューから、サイトを閉鎖する
  6. XOOPS管理メニューから、PHPデバッグモードにする
  7. PHPコンテンツを含むカスタムブロックを停止する
  8. すべてのブロックを停止する
  9. スタートモジュールの設定をしているなら元に戻す
  10. キャッシュの設定は全部キャッシュなしにする
  11. mainfile.phpと下記ファイル・ディレクトリを除いて全ファイルを削除する
    1. favicon.ico(もしカスタマイズしているなら)
    2. images/
    3. modules/
    4. themes/
    5. uploads/
    6. (XOOPS_TRUST_PATH)
  12. XOOPS Cube Legacy 2.1.3を解凍し、サーバに上書きしていく。このときinstallフォルダとmainfile.phpはアップロードしないこと。favicon.icoももし以前のものを使うならアップロードしない。
  13. もしモジュールの最新版かパッチを入手しているなら、このタイミングでアップロードする
  14. mainfile.phpを変更する:
    変更前:

    if (!isset($xoopsOption['nocommon']) && XOOPS_ROOT_PATH != '') {
      include XOOPS_ROOT_PATH."/include/common.php";
    }
    変更後:

    if (!defined('_LEGACY_PREVENT_LOAD_CORE_') && XOOPS_ROOT_PATH != '') {
      @include_once XOOPS_ROOT_PATH."/include/cubecore_init.php";
      if (!isset($xoopsOption['nocommon']) && !defined('_LEGACY_PREVENT_EXEC_COMMON_')) {
        include XOOPS_ROOT_PATH."/include/common.php";
      }
    }
    (見づらいのでコピペ推奨)

  15. サイトをブラウザで開くと、モジュール導入のページになるので、(必須)とあるものにチェックが入っていることを確認して進む
  16. 2.1.3アーカイブ内の/extras/XUpgradeを、modules/以下にアップロードする。その後管理メニューからこのモジュールをインストールする。
  17. XUpgradeをアンインストールする
  18. XOOPSにログインし、管理メニューより全てのモジュールをアップデートする
  19. システムモジュールが不要ならアンインストールする
  20. カスタムブロック以外のブロックをインストールする
  21. カスタムブロックをインストールする。このときブラウザの別ウインドウでカスタムブロックをチェックしながら行う
  22. テーマを戻す
  23. サイト確認後、問題がなければデバッグモードをオフにする
  24. サイト閉鎖を解除する

さて、アップグレードが終わったところでチェックしてみると、まだ直ってないww

散々悩みぬいた挙句、ひとつの設定に疑いを持つに至った。

ママさんは、スパムメールを防止するために、ブログのプロフィール設定のところにある管理者メールアドレスの欄に、偽のメールアドレスを設定していた。
ドメイン名は自前のもので、ユーザ名が存在しないものにしていたので、ドメイン管理者のメールアドレスにエラーメールが毎回届いていたので、そのことを知ってた。

もしかしてこれかと。

コメント入力フォームが呼び出しているのはPHPコードでCGIではないし、そのPHPコードからincludeしているコードを追っていくと、メールを送信するところがあるわけで。

ためしにママさんのブログの設定画面を見てみると……。
「コメントが投稿されるたびにメールを送る」がTrueになっとるww
原因がわかったw

コメント投稿→メールを送ろうとする→宛先不明→あぼーん

この設定をFalseにしたら、見事に直りました。

うーん、いままでの苦労は……。

コメント

  1. ママ より:

    お疲れ様です。(`・ω・´)シャキーン

  2. うずら より:

    なおってよかったネー(*´▽`)(´▽`*)ネー

  3. ちゃぼ より:

    難しいことはわかんないけど、ココもそうなってたよ。

    まぁ←戻る押せばいいんだけども。w

  4. うずら より:

    えっ!マジで??
    今はなおってる??