对于我所拥有的特定项目,不允许使用服务器端代码。如何在php(包含条件,条件等)中创建网站,然后将其转换为我可以提供给客户端的静态html网站?
更新:感谢所有建议wget的人。这就是我用过的东西。我应该指定我在PC上,所以我从这里抓住了windows版本:http://gnuwin32.sourceforge.net/packages/wget.htm。
答案 0 :(得分:39)
如果您有可用的Linux系统,请使用wget:
wget -k -K -E -r -l 10 -p -N -F -nH http://website.com/
选项
答案 1 :(得分:3)
构建您的网站,然后使用wget或lwp-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>
但是,如果你需要获得的页数很少,或者至少可管理,你有一些选项不需要任何第三方工具(不是你应该因为他们是第三方而给他们打了折扣。
您可以在命令行上使用php将其直接输出到文件中。
php myFile.php > myFile.html
使用此方法可能会很痛苦(尽管您可以将其全部放入shell脚本中),并且它不允许您以相同的方式传递变量(例如:php myFile.php?abc=1
将无效)。
您可以使用另一个PHP文件作为“构建”脚本,其中包含您想要的所有网址的列表,然后通过file_get_contents()
或file()
抓取它们并将它们写入本地文件。使用此方法,您还可以检查文件是否已更改(md5_file()
应该适用于此),这样您就可以知道如何为客户端提供更新。
继续#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(),它将“编译”您的模板并将其放在您可以输出的变量中。