如何在php中创建一个站点并让它生成一个静态版本?

时间:2008-09-15 20:28:08

标签: php html wget

对于我所拥有的特定项目,不允许使用服务器端代码。如何在php(包含条件,条件等)中创建网站,然后将其转换为我可以提供给客户端的静态html网站?

更新:感谢所有建议wget的人。这就是我用过的东西。我应该指定我在PC上,所以我从这里抓住了windows版本:http://gnuwin32.sourceforge.net/packages/wget.htm

10 个答案:

答案 0 :(得分:39)

如果您有可用的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:递归...当然我们想制作一个递归副本
  • -l 10:最大递归级别。如果你有一个非常大的网站,你可能需要增加一个更高的数字,但10个级别就足够了。
  • -p:下载每个页面的所有必要文件(css,js,images)
  • -N:打开时间戳。
  • -F:从文件中读取输入时,强制将其视为HTML文件。
  • -nH:默认情况下,wget将文件放在以站点主机名命名的目录中。这将禁止创建这些主机名目录并将所有内容放在当前目录中。

来源:Jean-Pascal Houde's weblog

答案 1 :(得分:3)

构建您的网站,然后使用wgetlwp-mirror等镜像工具获取静态副本

答案 2 :(得分:3)

我过去通过添加:

完成了这项工作
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。 如果你需要使用变量生成多个页面,一个非常简单的选择是使用所有GET变量的md5sum附加文件名,你只需要在HTML中更改它们。所以你可以转换:

somepage.php?var1=hello&var2=hullo

somepage_e7537aacdbba8ad3ff309b3de1da69e1.html

丑陋但有效。

有时您可以使用PHP生成javascript来模拟某些功能,但这不能轻易实现自动化。

答案 3 :(得分:1)

正常创建网站,然后使用蜘蛛网软件生成HTML副本。

HTTrack是我之前使用的软件。

答案 4 :(得分:1)

执行此操作的一种方法是在PHP中正常创建网站,并让脚本实际抓取网页(通过HTTP - 您可以使用wget或编写另一个只使用带URL的文件()的PHP脚本)并保存当你“完成”时,他们到公共网站的位置。然后,当您决定再次更改页面时,可以再次运行该脚本。当您拥有缓慢变化的数据库和大量流量时,此方法非常有用,因为您可以消除实时站点上的所有SQL查询。

答案 5 :(得分:1)

如果你使用modx,它有一个内置函数来导出静态文件。

答案 6 :(得分:1)

如果您有多个页面,包含各种请求变量和诸如此类的东西,其他评论者提到的其中一个蜘蛛工具(wget,lwp-mirror等)将是最简单,最强大的解决方案。 / p>

但是,如果你需要获得的页数很少,或者至少可管理,你有一些选项不需要任何第三方工具(不是你应该因为他们是第三方而给他们打了折扣。

  1. 您可以在命令行上使用php将其直接输出到文件中。

    php myFile.php > myFile.html

    使用此方法可能会很痛苦(尽管您可以将其全部放入shell脚本中),并且它不允许您以相同的方式传递变量(例如:php myFile.php?abc=1将无效)。

  2. 您可以使用另一个PHP文件作为“构建”脚本,其中包含您想要的所有网址的列表,然后通过file_get_contents()file()抓取它们并将它们写入本地文件。使用此方法,您还可以检查文件是否已更改(md5_file()应该适用于此),这样您就可以知道如何为客户端提供更新。

    < / LI>
  3. 继续#2之前,在将输出写入文件之前,请将其扫描为本地URL,然后将其添加到要下载的文件列表中。当你在那里时,将这些网址更改为链接到你最终命名输出的内容,这样你就可以在最后找到一个正常运行的网页。请注意这里的注意事项 - 如果这听起来不错,你可以使用已经存在的工具之一并为你做这件事。

答案 7 :(得分:1)

除了wget,你可以使用(Win | Web)HTTrack(Website)来获取静态页面。 HTTrack甚至可以更正文件和文档的链接以匹配静态输出。

答案 8 :(得分:0)

我在自己的网站上为某些保证不会更改的页面执行此操作 - 我只是运行一个可以煮沸的shell脚本(警告:bash伪代码):

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"

答案 9 :(得分:0)

wget可能是最完整的方法。如果您没有访问权限,并且您有基于模板的布局,则可能需要考虑使用Savant 3.我推荐Savant 3高于其他模板系统,如Smarty。

Savant的重量很轻,使用PHP作为模板语言,而不是一些专有的子语言。您想要查找的命令是fetch(),它将“编译”您的模板并将其放在您可以输出的变量中。

http://www.phpsavant.com/