ページ 11

eFormからのエラーメール

Posted: 2012年7月05日(木) 12:27
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が関係しているのでしょうか?

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

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

よく似たコードはDittoに含まれてますが、
$header = isset($header) ? $header : template::replace ..................
という感じで少し違いますね。何らかの理由で後半が切れているだけかもしれませんが。
ヒントになりそうな情報が他にもありそうでしょうか?

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

Posted: 2012年7月05日(木) 13:02
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

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

Posted: 2012年7月05日(木) 13:05
by yama
なるほどPHP5.4対応の問題のようですね。Non-static methodとあるので。パッチを作りますのでしばらくお待ちください。

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

Posted: 2012年7月05日(木) 13:17
by adamod
何時もお手数をお掛けします^^; PHP5.4・・・やはり鬼門のようですね。

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

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

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

Posted: 2012年7月05日(木) 13:51
by adamod
/moto/67.html はRSSフィードのページです。
管理画面からログアウトしてアクセスしてみましたが、エラーになってます。

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

Posted: 2012年7月05日(木) 13:54
by yama
たぶん「Error」とだけ表示されてますよね。(ログインしている場合はフルにデバッグ情報を出力します)

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

Posted: 2012年7月05日(木) 13:57
by adamod
yama さんが書きました:たぶん「Error」とだけ表示されてますよね。(ログインしている場合はフルにデバッグ情報を出力します)
その通りです。

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

Posted: 2012年7月05日(木) 14:03
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;
を追記してみてください。

確認できたら、どちらもいったん元に戻していただければと思います

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

Posted: 2012年7月05日(木) 14:16
by adamod
yama さんが書きました:試しに、manager/includes/document.parser.class.incをテキストエディタで開いて「if($nr == E_DEPRECATED) return true;」という文字列を検索し、その直下に
if($nr == E_STRICT) return true;
こう追記すると、フィードは正常に表示されるようになるでしょうか?
これで正常に表示されるようになりました!

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

Posted: 2012年7月05日(木) 14:20
by yama
なるほどです、ありがとうございます。今回のエラー情報は開発者視点では重要ですが、ゲスト視点では関係ないことと考えられるので、運営者の判断で選択できるように設定を追加してみます

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

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

※もしかするとこのパッチでは動作が変わらないかもしれません。思い当たる部分はあるので、その場合はすぐ修正します

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

Posted: 2012年7月06日(金) 12:02
by adamod
ご対応有り難うございます。

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

それと、グローバル設定の「セキュリティ」タブに「PHPエラーの検出レベル」という項目ですが、文字化けを起こしています。
当方の環境はUTF-8で統一しています。

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

Posted: 2012年7月07日(土) 16:14
by yama
http://code.google.com/p/modx-ja/downlo ... r4-log.zip
さらにパッチ作りました。今度は対象ファイルが多いので、managerディレクトリまるごととindex.phpのセットです。
これが問題なく動作すれば、PHP5.4/5.3環境下のMODXでとりあえず使えるライブラリがいろいろ増えます
※WordPress Integratorもファイルの書き換えなしで使えるかもしれません

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

Posted: 2012年7月08日(日) 17:05
by adamod
返事が遅くなり申し訳ありません。

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

有難うございました。

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

Posted: 2012年7月08日(日) 21:42
by yama
了解です。あとはDittoのRSSフォーマットのPHP5.4対応ですが、とりあえずstrict抑制で問題は回避できているので、これは次リリースまでにゆっくり見させていただきます。また何か気付いたことがあればよろしくお願いします