【问题标题】:Simple PHP opcode caching solution which does not need compilation? [closed]不需要编译的简单PHP操作码缓存解决方案? [关闭]
【发布时间】:2010-02-26 14:35:57
【问题描述】:

我有一个 PHP 站点,其中所有页面都包含一个 57K 生成的 PHP 文件。我正在考虑使用操作码缓存,因此不需要在每次加载页面时都解析文件(我假设加载已经解析的文件会比读取 57K 源文件更快)。

APC 似乎是很好的候选者,但根据 phpinfo,我的 Godaddy 共享主机没有编译它,我无法在共享主机环境中编译和安装它。 Zend 框架已安装,但根据文档,它还需要 APC 或其他操作码缓存作为后端。

还有哪些其他选项可以执行操作码缓存?是否有一个仅限 PHP 的操作码缓存解决方案,我可以简单地 FTP 到 Godaddy?

【问题讨论】:

    标签: php opcode-cache


    【解决方案1】:

    是否有仅 PHP 的操作码缓存 我可以简单地通过 FTP 访问的解决方案 天哪?

    很遗憾,没有。当 .php 文件运行时,已经为时已晚,因为解释和编译操作已经执行。

    因此,它必须作为 PHP 扩展运行,它们是经过编译的...

    【讨论】:

    • 好的,但是如果那个 PHP 文件加载了另一个 PHP 文件(上面提到的生成的文件),那么我可以想象一个 PHP 包将提供一个 load_opcode_if_possible("x.php") 函数和这个函数首先会尝试加载一个已经准备好的操作码文件,如果它不可用,那么它会读取源代码文件并立即将解析的操作码文件写入磁盘,以便下次使用。
    • @Tom:理论上你可以这样做,但它有它自己的惩罚,因为 PHP(据我所知)在编译前的解释阶段拉入包含/必需的文件。
    【解决方案2】:

    读取文件 PHP 文件、解析它、将其编译为操作码并执行操作码,都是由内部 PHP 引擎在内部完成的——这意味着 PHP 脚本完全无法控制这个过程;这也意味着改变该过程的唯一方法是通过 PHP 扩展(PHP 扩展意味着用 C 开发的扩展),它具有更高级别的控制。

    这意味着无法使用纯 PHP 开发操作码缓存:操作码操作、编译和缓存是您无法通过 PHP 控制的操作。

    而且由于 PHP 扩展可以访问引擎的内部,只有服务器管理员才能安装和启用它们——考虑到它们可能会使 PHP 崩溃,占用他们想要的任何内存量,你可能会理解为什么。

    因此,不幸的是,您没有太大希望:如果您想使用像 APC 这样的操作码缓存,您将不得不使用一些提供它的托管服务 - 这可能意味着使用您自己的专用服务器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-26
      • 1970-01-01
      • 2012-06-05
      • 1970-01-01
      • 2017-12-07
      • 2012-07-10
      • 2023-03-22
      • 1970-01-01
      相关资源
      最近更新 更多