6

わかりました、これは少しクレイジーに聞こえるかもしれませんが、ここで 1 分間我慢してください。

私は、SSI を使用してページ ヘッダー、フッター、およびメニューを含めることが標準であるサイトに取り組んでいます。インクルードされたファイルは、SSI 条件を使用してさまざまなブラウザーを処理し、一部の #include ネストと、一部の #set / #if トリックを使用してメニュー内の現在のページを強調表示します。つまり、SSI の #include ディレクティブ以上のものです。

美学に異議を唱える人もいると思いますが、静的 HTML の場合、実際には非常にうまく機能します。

ここで、問題: PHP スクリプトから同じ SSI 解析済みのヘッダーとフッターの html ファイルを「#include」することで、コードの重複を回避し、サイトの統一された外観を維持したいと考えています。PHP が通常の mod_php 環境で実行されている場合は、PHP の virtual() 関数を使用してそれを行うことができます。残念ながら、このサイトでは FastCGI/suexec を使用して PHP を実行しているため (各 VirtualHost が別のユーザーとして実行できるようになっています)、これにより virtual() が壊れます。

私は PHP で書いたかなり単純な SSI パーサーを使用してきました (#include といくつかの非常に単純な #if ステートメントを処理します) が、より一般的なソリューションが必要です。では、私が夢中になり、おそらくバグのある、より完全な SSI パーサーを作成する前に、PHP で作成された完全な SSI パーサーを知っている人はいますか? 当然のことながら、私が概説した制約の下で機能する他のソリューションにもオープンです。

お時間をいただきありがとうございます。

4

2 に答える 2

2

ESI を見てみましょう: http://en.wikipedia.org/wiki/Edge_Side_Includes

それらを処理するために PHP プロキシを作成できます。これは Symfony2 の HttpCache です: https://github.com/fabpot/symfony/blob/master/src/Symfony/Component/HttpKernel/HttpCache/Esi.php

または、Symfony2 よりもパフォーマンスの高い、Varnish のような HTTP プロキシを使用します...

于 2011-02-10T12:03:35.560 に答える