簡體   English   中英

用PHP編寫的SSI解析器?

[英]SSI parser written in PHP?

好吧,這可能聽起來有點瘋狂,但在這里忍受我一分鍾。

我正在開發一個標准是使用SSI來包含頁眉,頁腳和菜單的網站。 包含的文件使用SSI條件來處理不同的瀏覽器,一些#include嵌套,以及一些#set / #if技巧來突出顯示菜單中的當前頁面。 換句話說,它不僅僅是SSI中的#include指令。

我確信有些人可能會對美學產生爭論,但對於靜態HTML來說,它確實很有效。

現在,問題是:我想從我的PHP腳本中“#include”相同的SSI解析的頁眉和頁腳html文件,從而避免代碼重復並仍然保持網站的統一外觀。 如果PHP在通常的mod_php環境中運行,我可以通過使用PHP的virtual()函數來做到這一點。 不幸的是,該站點使用FastCGI / suexec來運行PHP(這樣每個VirtualHost可以作為不同的用戶運行),這會破壞virtual()。

我一直在使用我在PHP中編寫的一個相當簡單的SSI解析器(它處理#includes,以及一些非常簡單的#if語句),但我想要一個更通用的解決方案。 所以,在我開始編寫一些可能有問題,更完整的SSI解析器之前,有沒有人知道用PHP編寫的完整SSI解析器? 當然,我也對在我所概述的限制下工作的其他解決方案持開放態度。

非常感謝你的時間。

看看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

或者使用像Varnish這樣的HTTP代理,比Symfony2更高效...

我意識到這是一個老問題,但幾年前我遇到了同樣的問題,盡管有一個perl實現。 我繼續前進並分叉了之前的嘗試,並且實現了一個完整的apache(2.2.22) mod_include模擬器/解析器作為perl模塊http://search.cpan.org/dist/CGI-apacheSSI/lib/CGI/ apacheSSI.pm之后不久我找到了apache output filters ,並意識到完美的解決方案是否符合我的需求。 基本上,您可以告訴apache解析腳本的輸出,就像它是.shtml或.php(或其他)文件一樣。 所以你可以從perl或php(或其他)腳本輸出SSI標記,並讓apache解析它。 這是你可以這樣做的(在.htaccess文件中):

AddOutputFilter INCLUDES .cgi

這是正常的cgi文件,但要注意,這會給正在執行的所有.cgi文件增加相當多的開銷,所以我實際做的是創建一個特殊的擴展,以便它作為cgi運行,然后解析其輸出,而不是添加到正常cgi文件的開銷:

<Files ~ ".pcgi$">
    Options +SymLinksIfOwnerMatch +Includes
    AddOutputFilter INCLUDES .pcgi
</Files>

對於PHP你可以做一些像:

<Files ~ ".pphp$">
    Options +SymLinksIfOwnerMatch +Includes
    AddOutputFilter INCLUDES .pphp
</Files>

這應該做的伎倆! 希望能幫到那里的人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM