問題の背景
game.37.comビジネスのsmartyテンプレートを更新した後、複数の500エラーレコードがサーバーに表示されました。 PHP エラー ログに報告されたエラーは次のとおりです:
[2016 年 5 月 16 日 15:46:01 Asia/Shanghai] PHP 致命的エラー: /*/template_c の未定義関数 content_57397470478e99_59376883() の呼び出し/6aede77242b 285842c628673e93d8bf1bd4bc6b0.file .server_list.htm.php on line 67
現象:テンプレート更新後、初回アクセス時に500エラーが報告されますが、再び通常のアクセスが発生します。
トラブルシューティング
smartyを通常に使用した経験によれば、テンプレートを更新した後、PHPが500エラーを報告することはありません。そのため、サーバーの環境問題である可能性が推測され、トラブルシューティング用に特別な構成環境がリストされています。
プレリリース環境では、アクセラレータeAcceleratorを優先して確認してください。 eAcceleratorアクセラレータはPHPのopcodeをキャッシュするため、この問題が発生する可能性があります。
テスト環境でテストするデバッグページ: http://game.37.com/server_list_275.html
デバッグテンプレート: main.htm
生成されたsmartyコンパイルされたファイル: /*/template_c/6aede77242b285 842c628 673e93d8bf1bd4bc6b0.ファイル.server_list.htm.php
smartyのコンパイル済みファイル
を確認してください。更新されたsmartyテンプレート後に編集されたファイル2を比較し、PHPその理由は、エラーは、テンプレート内の古い関数を呼び出すことです。
PHP例外エラーメッセージPHPの致命的なエラー: /*/template_c/6aede77242b285842c628673e93d8bf1bd4bc6b0.ht内の未定義関数content_573a944d7a2608_39051073()の呼び出し。 m.php 67 行目
smarty動作原理図:
smartyテンプレートの更新にあります。smartyは新しいコンパイル済みファイルを生成しますが、古いファイルの内容は依然としてアクセラレータによってキャッシュされており、これには、テンプレートファイル。アクセラレータのヒット ログを開くと、関連するレコードを表示できます:
filterパラメータ、smartyのコンパイルされたファイルはキャッシュされませんeaccelerator.filter= "! /*/template_c/*.php"
ただし、パフォーマンスへの影響を評価する必要があります
APC理由: 現在使用されている eaccelerator は
1.0-dev バージョンです。正式にリリースされたバージョンではありません。 APCは公式ソースからのものであり、安定版バージョンにダウンロードできます。