eFormからのエラーメール

質問全般・改善要望
返信する
adamod
メンバー
メンバー
記事: 31
登録日時: 2012年6月27日(水) 01:08

eFormからのエラーメール

投稿記事 by adamod »

-----
ご利用のサーバ: Apache 2.2.15
MODXのバージョン:1.0.6j-r4
PHPのバージョン:5.4.4
MySQLのバージョン:5.1.61
ブラウザ:Chrome等
-----

上記の環境に移行したら、eFormがエラーメールを1日に100件くらい送ってくるようになりました。メールの本文は次の通り

コード: 全て選択

Parser - $header = isset($header) ? $header : temp
また、イベントログにも同様のエラーが記録されています。eFormのバージョンは1.4.4.7です。

またPHP5.4が関係しているのでしょうか?
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: eFormからのエラーメール

投稿記事 by yama »

とりあえずグローバル設定の「システムエラーをメールで通知する」で「通知しない」に設定できますので、今は一時的にオフにしておくのがよさそうに思います。
(エラーのメール通知はeFormとは関係なく、最近になってできた機能です)

よく似たコードはDittoに含まれてますが、
$header = isset($header) ? $header : template::replace ..................
という感じで少し違いますね。何らかの理由で後半が切れているだけかもしれませんが。
ヒントになりそうな情報が他にもありそうでしょうか?
adamod
メンバー
メンバー
記事: 31
登録日時: 2012年6月27日(水) 01:08

Re: eFormからのエラーメール

投稿記事 by adamod »

早速のお返事有り難うございます。

なるほど、メールはeFormだから出してる訳じゃないんですね。OFFにしておきました。

他にヒントになりそうな情報は・・・・エラー・ログの中身は次のとおりです。(何と1分に一回のペースで来てます)
« MODX Parse Error »
MODX encountered the following error while attempting to parse the requested resource:
« PHP Parse Error »
PHP error debug
Error: Non-static method template::replace() should not be called statically, assuming $this from incompatible context
Error type/ Nr.: E_STRICT - 2048
File: /home/mctaichi/public_html/assets/snippets/ditto/formats/rss.format.inc.php
Line: 143
Line 143 source: $header = isset($header) ? $header : template::replace($rss_placeholders,$rss_header);
Basic info
REQUEST_URI: /moto/67.html
ID: 67
Current Snippet: Ditto
Referer:
User Agent: Feedfetcher-Google; (+http://www.google.com/feedfetcher.html; 3 subscribers; feed-id=10021753910820966827)
Parser timing
MySQL: 0.0009 s (2 Requests)
PHP: 0.0246 s
Total: 0.0254 s

# call path
1 messageQuit() manager/includes/document.parser.class.inc.php on line 3477
2 phpError() assets/snippets/ditto/formats/rss.format.inc.php on line 143
3 include() manager/includes/document.parser.class.inc.php(1306) : eval()'d code on line 208
4 eval() manager/includes/document.parser.class.inc.php on line 1306
5 evalSnippet() manager/includes/document.parser.class.inc.php on line 1445
6 _get_snip_result() manager/includes/document.parser.class.inc.php on line 1369
7 evalSnippets() manager/includes/document.parser.class.inc.php on line 1776
8 parseDocumentSource() manager/includes/document.parser.class.inc.php on line 362
9 outputContent() manager/includes/document.parser.class.inc.php on line 333
10 prepareResponse() manager/includes/document.parser.class.inc.php on line 238
11 executeParser() index.php on line 129
最後に編集したユーザー adamod [ 2012年7月05日(木) 13:05 ], 累計 1 回
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: eFormからのエラーメール

投稿記事 by yama »

なるほどPHP5.4対応の問題のようですね。Non-static methodとあるので。パッチを作りますのでしばらくお待ちください。
adamod
メンバー
メンバー
記事: 31
登録日時: 2012年6月27日(水) 01:08

Re: eFormからのエラーメール

投稿記事 by adamod »

何時もお手数をお掛けします^^; PHP5.4・・・やはり鬼門のようですね。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: eFormからのエラーメール

投稿記事 by yama »

/moto/67.html のページは、管理画面にログインしてない状態でアクセスしてもエラーになってますよね。エラーの問題を解決しつつ、このレベルのワーニングでもエラー扱いしないように先に設定を加えたいと思いますので(PHP5.4では問題がある古いスニペットを自前でインストールしている人も多いと思いますので)、もしよければ検証に協力いただけると助かります
adamod
メンバー
メンバー
記事: 31
登録日時: 2012年6月27日(水) 01:08

Re: eFormからのエラーメール

投稿記事 by adamod »

/moto/67.html はRSSフィードのページです。
管理画面からログアウトしてアクセスしてみましたが、エラーになってます。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: eFormからのエラーメール

投稿記事 by yama »

たぶん「Error」とだけ表示されてますよね。(ログインしている場合はフルにデバッグ情報を出力します)
adamod
メンバー
メンバー
記事: 31
登録日時: 2012年6月27日(水) 01:08

Re: eFormからのエラーメール

投稿記事 by adamod »

yama さんが書きました:たぶん「Error」とだけ表示されてますよね。(ログインしている場合はフルにデバッグ情報を出力します)
その通りです。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: eFormからのエラーメール

投稿記事 by yama »

試しに、manager/includes/document.parser.class.incをテキストエディタで開いて「if($nr == E_DEPRECATED) return true;」という文字列を検索し、その直下に
if($nr == E_STRICT) return true;
こう追記すると、フィードは正常に表示されるようになるでしょうか?

呼び出し元の関数の書き方が微妙におかしいようなので、もしかすると何も出てこないかもしれません。その場合は同じファイルの
function phpError($nr, $text, $file, $line) {
という文字列を検索し、その直下に同じく
if($nr == E_STRICT) return true;
を追記してみてください。

確認できたら、どちらもいったん元に戻していただければと思います
adamod
メンバー
メンバー
記事: 31
登録日時: 2012年6月27日(水) 01:08

Re: eFormからのエラーメール

投稿記事 by adamod »

yama さんが書きました:試しに、manager/includes/document.parser.class.incをテキストエディタで開いて「if($nr == E_DEPRECATED) return true;」という文字列を検索し、その直下に
if($nr == E_STRICT) return true;
こう追記すると、フィードは正常に表示されるようになるでしょうか?
これで正常に表示されるようになりました!
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: eFormからのエラーメール

投稿記事 by yama »

なるほどです、ありがとうございます。今回のエラー情報は開発者視点では重要ですが、ゲスト視点では関係ないことと考えられるので、運営者の判断で選択できるように設定を追加してみます
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: eFormからのエラーメール

投稿記事 by yama »

パッチを作りましたので、もしよければ動作検証をお願いします。解凍したパッチをディレクトリ構成のままファイル2つを上書きし、グローバル設定を変更します。
グローバル設定の「セキュリティ」タブに「PHPエラーの検出レベル」という項目を追加しましたので、
・警告レベルの軽いエラー以外を検出する
・E_NOTICE 以外の全てのエラーを検出(現在のMODXの動作と同じ)
この2つの設定項目でそれぞれ、エラーの検出(ログ記録の発生の有無)が変わります。

※もしかするとこのパッチでは動作が変わらないかもしれません。思い当たる部分はあるので、その場合はすぐ修正します
添付ファイル
patch.zip
(39.13 KiB) ダウンロード数: 373 回
adamod
メンバー
メンバー
記事: 31
登録日時: 2012年6月27日(水) 01:08

Re: eFormからのエラーメール

投稿記事 by adamod »

ご対応有り難うございます。

当パッチをインストールしましたが、残念ながら、例のRSSページはエラーが出たままです。

それと、グローバル設定の「セキュリティ」タブに「PHPエラーの検出レベル」という項目ですが、文字化けを起こしています。
当方の環境はUTF-8で統一しています。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: eFormからのエラーメール

投稿記事 by yama »

http://code.google.com/p/modx-ja/downlo ... r4-log.zip
さらにパッチ作りました。今度は対象ファイルが多いので、managerディレクトリまるごととindex.phpのセットです。
これが問題なく動作すれば、PHP5.4/5.3環境下のMODXでとりあえず使えるライブラリがいろいろ増えます
※WordPress Integratorもファイルの書き換えなしで使えるかもしれません
adamod
メンバー
メンバー
記事: 31
登録日時: 2012年6月27日(水) 01:08

Re: eFormからのエラーメール

投稿記事 by adamod »

返事が遅くなり申し訳ありません。

先ほどインストールした所、RSSページは正常に表示するようになりました。
これで、PHP5.3/5.4環境でも、Strictなエラーは出なくなった訳ですね。

有難うございました。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: eFormからのエラーメール

投稿記事 by yama »

了解です。あとはDittoのRSSフォーマットのPHP5.4対応ですが、とりあえずstrict抑制で問題は回避できているので、これは次リリースまでにゆっくり見させていただきます。また何か気付いたことがあればよろしくお願いします
返信する