巨大的PHP文件脚本


Huge PHP file script

我有一个PHP脚本(机器生成),大小为3MB。其含量主要为switchesecho的一对。它不是点什么,只有echos。我使用它作为慢SQL查询的"缓存",所以我生成所有可能的输出到这个PHP,然后在URL中使用ID来获得适当的结果。

到目前为止,我一直在使用脚本,有700KB,一切都很好。现在,我添加了一些数据,最后我有了3MB。运行这个可以吗?还是我应该考虑其他解决方案?

听起来你是在自行其是。考虑使用广泛接受的缓存解决方案,如APC或memcache。

还可以考虑使用Zend缓存组件,它可以从框架的其余部分中提取和使用,并为许多缓存后端提供抽象的API,包括基于文件的,APC和memcache。

您所描述的解决方案可能会在每次执行时使用过多的内存,浪费CPU解析不必要的PHP代码,并使处理诸如无效之类的事情变得困难。

使用缓存库而不是将内容打包到机器生成的PHP文件中,因为每次调用这种大小的PHP文件时仍然需要解释它,这会降低主机服务器的性能。

一个流行的缓存组件是https://github.com/illuminate/cache -在Laravel中使用。您应该能够在框架之外为您的程序使用它。

如果你觉得更舒服的话,你可以自己卷。不确定您使用什么逻辑来缓存查询(它是文字,简单或复杂),但是通过md5():

将奇怪的字符串与文件名关联起来的简单方法是:
function get_query( $sql ) {
    $cache_filename = sprintf( "cache/%s.sql", md5($sql) );
    if( file_exists($cache_filename) ) {
        return( file_get_contents($cache_filename) );
    }
    // otherwise, perform the query
    $data = ...
    file_put_contents( $cache_filename, $data );
    return( $data );
}

文件名看起来都像MD5哈希值。例如,如果您的查询是"show tables",那么文件名将是cache/489b4ceb2f4301a7132628303f99240d.sql