【发布时间】:2012-10-18 16:53:16
【问题描述】:
假设我强制 mod_php 接收 .html 文件。假设这些文件之一中有 0 个 PHP 代码。
如果我在启用 APC 的情况下浏览到该文件,会发生什么?它会被缓存还是仍然需要从磁盘中读取?
另一种情况,我有一个.php 文件。 PHP 标签之外的内容会发生什么变化?它会存储在内存中吗?还是每次都要从磁盘读取?
【问题讨论】:
假设我强制 mod_php 接收 .html 文件。假设这些文件之一中有 0 个 PHP 代码。
如果我在启用 APC 的情况下浏览到该文件,会发生什么?它会被缓存还是仍然需要从磁盘中读取?
另一种情况,我有一个.php 文件。 PHP 标签之外的内容会发生什么变化?它会存储在内存中吗?还是每次都要从磁盘读取?
【问题讨论】:
如果我在启用 APC 的情况下浏览到该文件,会发生什么?它会被缓存还是仍然需要从磁盘中读取?
如果您将.html 文件设置为解析为PHP,那么是的——它将被缓存。有点像。
具体来说,PHP 将为文档生成一个 optree,它最终会成为一个非常短且无聊的程序,其中包含一个非常大的字符串常量。这最终将存储在内存中。但是,如果这就是您所追求的,那么您最好使用 mod_mem_cache(与 memcached 无关!)之类的东西,因为它实际上是为缓存静态内容而设计的。
另一种情况,我有一个 .php 文件。 PHP 标签之外的内容会发生什么变化?它会存储在内存中吗?还是每次都要从磁盘读取?
正如我之前提到的,PHP 标记之外的内容仍然被视为 PHP“程序”的一部分——尽管它在内部的处理方式略有不同,由 ?> ... <?php 包围的一大块静态文本(或开头或文件的结尾)被有效地视为在echo "..." 中。 (除了没有涉及在该字符串中转义的所有问题。)例如,以下两个代码块在功能上或多或少相同,除了空格的一些差异:
<?php
if ($condition) {
echo "Hello";
}
?>
对比
<?php if ($condition) { ?>
Hello
<?php } ?>
【讨论】: