[英]How can I create a site in php and have it generate a static version?
對於我擁有的特定項目,不允許使用服務器端代碼。 How can I create the web site in php (with includes, conditionals, etc) and then have that converted into a static html site that I can give to the client?
更新:感謝所有建議 wget 的人。 這就是我用的。 我應該指定我在 PC 上,所以我從這里獲取了 windows 版本: http://gnuwin32.sourceforge.net/packages/wget.htm 。
如果您有可用的 Linux 系統,請使用wget :
wget -k -K -E -r -l 10 -p -N -F -nH http://website.com/
選項
資料來源: Jean-Pascal Houde 的博客
構建您的站點,然后使用wget或lwp-mirror等鏡像工具獲取 static 副本
我過去通過添加:
ob_start();
在頁面頂部,然后在頁腳中:
$page_html = ob_get_contents();
ob_end_clean();
file_put_contents($path_where_to_save_files . $_SERVER['PHP_SELF'], $page_html);
在將 HTML 烘焙到文件之前,您可能需要將 .php 擴展名轉換為 .html 。 如果您需要使用變量生成多個頁面,一個非常簡單的選項是 append 文件名和所有 GET 變量的 md5sum,您只需在 HTML 中更改它們。 所以你可以轉換:
somepage.php?var1=hello&var2=hullo
至
somepage_e7537aacdbba8ad3ff309b3de1da69e1.html
丑陋但有效。
有時您可以使用 PHP 生成 javascript 來模擬某些功能,但這不能很容易地自動化。
正常創建站點,然后使用爬蟲軟件生成 HTML 副本。
HTTrack是我以前用過的軟件。
一種方法是像往常一樣在 PHP 中創建站點,並讓腳本實際抓取網頁(通過 HTTP - 您可以使用 wget 或編寫另一個 php 腳本並將它們保存到僅使用文件的腳本) “完成”后的公共網站位置。 然后,當您決定再次更改頁面時,您可以再次運行腳本。 當您有一個緩慢變化的數據庫和大量流量時,此方法非常有用,因為您可以消除實時站點上的所有 SQL 查詢。
如果你使用 modx 它有一個內置的 function 來導出 static 文件。
如果您有許多頁面,包含各種請求變量等等,那么其他評論者提到的爬蟲工具之一(wget、lwp-mirror 等)可能是最簡單和最強大的解決方案。
但是,如果您需要獲取的頁面數量很少,或者至少是可管理的,那么您有一些不需要任何第三方工具的選項(並不是因為它們是第三方就應該打折它們)。
您可以在命令行上使用 php 將其直接放入 output 文件中。
php myFile.php > myFile.html
使用這種方法可能會很痛苦(盡管您可以將其全部放入 shell 腳本中),並且它不允許您以相同的方式傳遞變量(例如: php myFile.php?abc=1
work).
您可以使用另一個 PHP 文件作為“構建”腳本,其中包含您想要的所有 URL 的列表,然后通過file_get_contents()
或file()
它們並將它們寫入本地文件。 使用這種方法,您還可以使用它來檢查文件是否已更改( md5_file()
應該適用於此),因此如果他們只想要更新,您將知道給您的客戶什么。
繼 #2 之后,在將 output 寫入文件之前,掃描它以查找本地 url,然后將它們添加到要下載的文件列表中。 當您在那里時,將這些網址更改為鏈接到您最終將命名為 output 的內容,這樣您最后就有了一個正常工作的 web。 請注意 - 如果這聽起來不錯,您可能可以使用已經存在的工具之一並為您執行此操作。
或者 wget 您可以使用 (Win|Web)HTTrack ( Website ) 來獲取 static 頁面。 HTTrack 甚至更正文件和文檔的鏈接以匹配 static output。
您可以使用 python 或 Visual Basic(或您的選擇)一次創建您的 static 文件,然后上傳它們。
對於在 excel 文件中包含 1100 萬個企業列表的項目,我使用 VBA 將電子表格數據提取到 11 百萬個小文件中。php 文件,解壓縮然后壓縮。
瞧——一個超級快速的商業目錄
我從 Jekyll 開始,但在大約 50 萬次輸入后,生成器陷入了困境。 對於 1100 萬,看起來它將在大約 2 個月內完成構建!
我在我自己的 web 站點上針對某些保證不會更改的頁面執行此操作——我只是運行一個 shell 腳本,該腳本可以被煮沸(警告:ZD574D4BB40C84861791A694A999CCE9):
find site_folder -name \*.static.php -print -exec Staticize {} \;
靜態化為:
# This replaces .static.php with .html
TARGET_NAME="`dirname "$1"`/"`basename "$1" .static.php`".html
php "$1" > "$TARGET_NAME"
wget 可能是最完整的方法。 如果您無權訪問它,並且您有基於模板的布局,則可能需要考慮使用 Savant 3。我強烈推薦 Savant 3,而不是 Smarty 等其他模板系統。
Savant 重量很輕,使用 PHP 作為模板語言,而不是一些專有的子語言。 您要查找的命令是 fetch(),它將“編譯”您的模板並將其放在您可以 output 的變量中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.