Reply To: bcache を有効後 advanced-cache.php でシンタックスエラー
TOP › Forums › バグ報告と提案(Requests and Feedback) › bcache を有効後 advanced-cache.php でシンタックスエラー › Reply To: bcache を有効後 advanced-cache.php でシンタックスエラー
Kusanagiご担当者様
WP KUSANAGI 1.3.3にバージョンアップ後も、advanced-cache.php でシンタックスエラーとなる事象を確認致しました。
advanced-cache.php の具体的なシンタックスエラーは以下の部分となります。
###PHPコード###
略
new SiteManagerAdvancedCache();
ここから
foreach ( $this->device_regexes as $group => $regex ) {
if ( preg_match( $regex, $_SERVER['HTTP_USER_AGENT'] ) ) {
return $group;
}
}
return false;
}
}
new SiteManagerAdvancedCache();
ここまで
###PHPコード###
new SiteManagerAdvancedCache(); を宣言している下の部分に上記のコード("ここから"から"ここまで"とかいた部分)が紛れ込むというものです。
以下、調査結果です。
advanced-cache.php は kusanagi-core フォルダ内の advanced_cache_tpl フォルダ内の advanced-cache.tpl をベースに作成されていることを確認致しました。また、最終的な advanced-cache.php を生成するには page-cache.php で advanced-cache.tpl をベースとして文字列の置換処理が行われていることを確認致しました。
トラブル改善に向けての最初の対応は、置換処理中に上記の構文エラーを引き起こす原因が紛れていると調査を進めていたのですが、もろもろ考慮した結果、文字列の置換処理が今回のエラーに直結している可能性は低いと判断致しました(置換処理が上記の構文エラーを引き起こすような処理になっていないはず?)。そこで、最終的に生成したプログラムを advanced-cache.php に書き込む部分に問題があるのではという結論に至りました。
【対処】
page-cache.php で advanced-cache.php に書き込み処理をしている部分に対して LOCK_EX オプションを追加致しました。実装は以下の通りです(ログを取得するようにカスタマイズ済)。
// 出力先ファイルに書き込み(排他ロックを適用)
$result = @file_put_contents($advanced_cache_file, $advanced_cache_data, LOCK_EX);
if ($result === false) {
error_log("[ERROR] 同時アクセスが発生しました: " . $advanced_cache_data);
} else {
error_log("[INFO] ファイルの書き込みに成功しました: ");
}
結果、bcacheを有効にした日には必ず1度以上は起こっていたシンタックスエラーのトラブルが、現在5日連続で発生していない状況です。
上記内容を踏まえ、
・LOCK_EXを入れることは適切なのか
・または別の問題なのか
・LOCK_EXを入れることはページ表示速度に影響はないかなど(1つのファイルをロックするので表示速度に影響がある可能性有)
以上、アドバイスをいただけると助かります。