簡體   English   中英

如何在 php 中創建站點並讓它生成 static 版本?

[英]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/

選項

  • -k:將鏈接轉換為相對鏈接
  • -K:保留文件的原始版本,沒有 wget 進行的轉換
  • -E:將 html 文件重命名為 .html(如果它們還沒有 htm(l) 擴展名)
  • -r: recursive……當然我們想要做一個遞歸副本
  • -l 10:最大遞歸級別。 如果你有一個非常大的網站,你可能需要放一個更高的數字,但 10 級應該足夠了。
  • -p:為每個頁面下載所有必要的文件(css、js、圖像)
  • -N:開啟時間戳。
  • -F:從文件中讀取輸入時,強制將其視為 HTML 文件。
  • -nH:默認情況下,wget 將文件放在以站點主機名命名的目錄中。 這將禁止創建這些主機名目錄並將所有內容放在當前目錄中。

資料來源: Jean-Pascal Houde 的博客

構建您的站點,然后使用wgetlwp-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 等)可能是最簡單和最強大的解決方案。

但是,如果您需要獲取的頁面數量很少,或者至少是可管理的,那么您有一些不需要任何第三方工具的選項(並不是因為它們是第三方就應該打折它們)。

  1. 您可以在命令行上使用 php 將其直接放入 output 文件中。

    php myFile.php > myFile.html

    使用這種方法可能會很痛苦(盡管您可以將其全部放入 shell 腳本中),並且它不允許您以相同的方式傳遞變量(例如: php myFile.php?abc=1 work).

  2. 您可以使用另一個 PHP 文件作為“構建”腳本,其中包含您想要的所有 URL 的列表,然后通過file_get_contents()file()它們並將它們寫入本地文件。 使用這種方法,您還可以使用它來檢查文件是否已更改( md5_file()應該適用於此),因此如果他們只想要更新,您將知道給您的客戶什么。

  3. 繼 #2 之后,在將 output 寫入文件之前,掃描它以查找本地 url,然后將它們添加到要下載的文件列表中。 當您在那里時,將這些網址更改為鏈接到您最終將命名為 output 的內容,這樣您最后就有了一個正常工作的 web。 請注意 - 如果這聽起來不錯,您可能可以使用已經存在的工具之一並為您執行此操作。

或者 wget 您可以使用 (Win|Web)HTTrack ( Website ) 來獲取 static 頁面。 HTTrack 甚至更正文件和文檔的鏈接以匹配 static output。

您可以使用 python 或 Visual Basic(或您的選擇)一次創建您的 static 文件,然后上傳它們。

對於在 excel 文件中包含 1100 萬個企業列表的項目,我使用 VBA 將電子表格數據提取到 11 百萬個小文件中。php 文件,解壓縮然后壓縮。

https://contactlookup.us

瞧——一個超級快速的商業目錄

我從 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 的變量中。

http://www.phpsavant.com/

暫無
暫無

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

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