基于 PHP 数组生成 PHP 源代码

4
我有一个不可修改的函数,需要几秒钟才能完成。该函数返回一个对象数组。结果每天只会更改一次。
为了加快速度,我想使用APC缓存结果,但是托管提供商(共享托管环境)没有提供任何内存缓存解决方案(APC,memcache等)。
我找到的唯一解决方案是使用serialize()将数据存储到文件中,然后再反序列化数据。
将数组生成php源代码呢?以后我可以简单地调用它。
require data.php

将数据存入预定义变量中。

谢谢!

更新:无法将结果存储为.html文件,因为输出取决于用户。


如果您未登录,您的提供商是否允许您的程序在运行时修改其脚本?如果我是提供商,基于可能会导致病毒问题,我会倾向于禁止这种操作。 - Ira Baxter
@Ira:PHP脚本是ASCII文件,因此它们被视为数据而不是可执行文件。服务器无法区分您写入文件的数据(比如配置文件、非常简单的数据库或其他内容)和您写入文件并由PHP解释器解析的数据。 - KingCrunch
据我所知,没有任何限制。动态生成 PHP 文件应该是可以的! - Markus Hi
3个回答

10
你是说像这样的东西吗?
// File: data.php
<?php
return array(
  32,
  42
);


// Another file
$result = include 'data.php';
var_dump($result);

这已经是可以实现的了。要更新你的文件,你可以使用类似这样的方法。
file_put_contents('data.php', '<?php return ' . var_export($array, true) . ';');

更新: 然而,使用serialize()/unserialize()并将序列化的数组存储到文件中也没有任何问题。

2
为什么不直接缓存生成的HTML页面呢?这可以相对简单地实现:
// Check to see if cached file exists
// You could run a crob job to delete this at a certain time
// or have the cache file expire after a set amount of time
if(file_exists('cache.html')) {
  include('cache.html');
  exit;
}

ob_start(); // start capturing output buffer

// do output

$output = ob_get_contents();
$handle = fopen('cache.html', 'w');
fwrite($handle, $output);
fclose($handle);

ob_end_flush();

根据我在问题中提供的信息,提供一个完全有效和高效的解决方案 - 但输出取决于用户 - 我已更新问题。谢谢! - Markus Hi

0
你可以将答案写入数据库,并使用函数参数作为键。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接