PHP 动态语言静态化

251 阅读1分钟

新建文件 demo.php

正常输出


<p>在 demo.php 文件下输出 html 文本</p>

开启输出控制缓冲 ob_start


<?php

ob_start(); // 打开输出控制缓冲

?>

<p>在 demo.php 文件下输出 html 文本</p>

<?php

$content = ob_get_contents(); // 返回输出缓冲区的内容

ob_end_flush(); // 冲刷出(送出)输出缓冲区内容并关闭缓冲

var_dump($content);

\

\

把缓存写入文件


<?php

$cache_name = md5(__FILE__) . '.html';

\


ob_start(); // 打开输出控制缓冲

?>

<p>在 demo.php 文件下输出 html 文本</p>

<?php

$content = ob_get_contents(); // 返回输出缓冲区的内容

ob_end_flush(); // 冲刷出(送出)输出缓冲区内容并关闭缓冲

\


$handle = fopen($cache_name, 'w');

fwrite($handle, $content);

fclose($handle);

var_dump($cache_name);

运行后生成临时文件 xxxx.html 缓存

\

关键缓存判断


<?php

$cache_name = md5(__FILE__) . '.html';

$cache_lifetime = 3600;

// filectime() 函数返回指定文件的上次修改时间

if (file_exists($cache_name)

&& filectime(__FILE__) <= filectime($cache_name)

&& filectime($cache_name) + $cache_lifetime > time()) {

// 缓存文件存在

// 当前文件是否有修改(文件的修改时间小于缓存文件的修改问)

// 缓存文件是否已经过期

include $cache_name;

exit;

}

\


ob_start(); // 打开输出控制缓冲

?>

<p>在 demo.php 文件下输出 html 文本</p>

<?php

$content = ob_get_contents(); // 返回输出缓冲区的内容

ob_end_flush(); // 冲刷出(送出)输出缓冲区内容并关闭缓冲

\


$handle = fopen($cache_name, 'w');

fwrite($handle, $content);

fclose($handle);

根据不同的用户 id 做不同的缓存


<?php

$id = intval($_GET['id']);

if (empty($id)) {

$id = '';

}

\


$cache_name = md5(__FILE__) . '-' . $id .'.html';

$cache_lifetime = 3600;

// filectime() 函数返回指定文件的上次修改时间

if (file_exists($cache_name)

&& filectime(__FILE__) <= filectime($cache_name)

&& filectime($cache_name) + $cache_lifetime > time()) {

// 缓存文件存在

// 当前文件是否有修改(文件的修改时间小于缓存文件的修改问)

// 缓存文件是否已经过期

include $cache_name;

exit;

}

\


ob_start(); // 打开输出控制缓冲

?>

<p>在 demo.php 文件下输出 html 文本. <?php echo $id?></p>

<?php

$content = ob_get_contents(); // 返回输出缓冲区的内容

ob_end_flush(); // 冲刷出(送出)输出缓冲区内容并关闭缓冲

\


$handle = fopen($cache_name, 'w');

fwrite($handle, $content);

fclose($handle);

\