从PHP保存HTML

问题描述:

比方说,我想用php在我的网站上生成动态数据,但我不希望用户去任何.php页面。从PHP保存HTML

相反,我想每晚运行一次php脚本并保存一个.html文件,以便浏览我的网站时用户只需看到静态html。

我想象的方式是每个需要动态数据的页面都有一个.html和一个.php文件。例如:

  • newsAndInformation.html
  • newsAndInformation.php

这是常见的做法?那里有很好的教程吗?

+1

您可以编辑'.htaccess'。 – hjpotter92 2013-02-22 17:31:34

+4

这就是所谓的静态缓存。您可以使用ob_start和ob_get_contents来获取您生成的代码并将其放入静态文件中。您可以使用htaccess来检查是否存在静态文件,并在静态文件存在并且年龄小于xx天时提供静态文件..这仅仅是一个简单的例子。 – 2013-02-22 17:31:59

+1

这是因为你想缓存一些东西还是因为你想让它看起来像一个HTML页面? 因为有了URL重写,你可以让url'/ anypage.html' 指向'anypage.php'而没有任何人意识到它。 – cIph3r 2013-02-22 17:34:05

您可以通过在.htaccess文件中使用巧妙的mod_rewrite规则speed up your site with static pages

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^Example/ index.php [L,NC,QSA] 

此规则执行以下操作...

  1. 检查该文件不存在请求的URL

  2. 检查一个目录不存在的请求的URL

  3. 如果是 - 显示静态文件/目录(目录需要一个index.html文件)

  4. 如果NO - 重定向到您的PHP文件,它可以运行并保存相应的文件下一个请求

你的PHP文件将吐出的响应:

<?php 
ini_set('zlib.output_compression', 'On'); 

ob_start(); 

// Logic to create your content... 

// use ob_get_contents() to get the response and save it 

ob_end_flush(); 
?> 

一粗略的例子将是...

yoursite/Example/Test/ 

在第一次访问,这将打你的PHP页面。然后,您将文件保存到/Example/Test/index.html,第二个请求将在不使用PHP的情况下为静态页面提供服务。

+0

+1不错!您需要添加类似cron作业的内容来每天清理一次html文件,以满足OP的刷新要求。 – jeroen 2013-02-22 17:41:06

+0

我通常会在编辑页面时自动删除该文件夹,因此如果实际进行了更改,它只会重新生成静态文件。对于需要真正动态(即基于未来日期的自动发布)的页面,我使用较小的PHP文件来处理缓存,该文件检查缓存项目的日期和时间。 – Fenton 2013-02-22 17:42:53

+0

性感!我会尝试一下。 – 2013-02-22 17:45:09

你可以创建一个简单的类,使用fwrite来做到这一点。

如果您有足够的数据需要更复杂的解决方案,您可以找到更广泛的缓存系统。

添加在.htaccess文件中的以下

RewriteEngine on 
RewriteRule ^(.*)\.html $1\.php 

这将使http://www.domain.com/myPage.html真正指向http://www.domain.com/myPage.php但用户看到.html