PHP是否每次请求都读取所需的脚本?

时间:2013-01-12 09:59:53

标签: php

PHP在处理新请求时是否每次都读取所需的脚本?

您能解释一下PHP执行哪些磁盘IO操作来处理单个请求

如果PHP是Apache模块或PHP-fpm

,是否会发生变化

3 个答案:

答案 0 :(得分:7)

想象一下:

<强> script_a.php

<?php
$foo = 'bar';
$bar = 'foo';
?>

<强> script_b.php

<?php
require_once 'script_a.php';
echo $foo . ' ' . $bar;
?>

在运行时, script_b.php 实际上包含:

<?php
$foo = 'bar';
$bar = 'foo';
echo $foo . ' ' . $bar;
?>

因此,每次处理新请求时,它都会读取脚本(或脚本)。这就是为什么中高负载的服务器使用APCeAccelerator等操作码缓存的原因。

这些操作是将整个脚本(需要/包括已处理)缓存在内存中,因此不必将其处理为下一个请求的字节码,而是可以执行。这可以转化为显着的性能提升,因为没有磁盘I / O,Zend引擎不必再将脚本转换为字节码。

修改

  

如果PHP是Apache模块或PHP-fpm

,是否会发生变化

不,至少不是PHP处理包含/要求的方式。

希望这有帮助。

答案 1 :(得分:1)

当执行PHP脚本时,它将从硬盘驱动器中读取。对于最初执行的脚本包含的任何脚本也是如此。但是,如果您担心性能,可以使用某些缓存技术。

见这里:http://php.net/manual/en/book.apc.php

答案 2 :(得分:0)

PHP会在每次请求时读取文件。您可以使用操作码cacher(如XCache)将操作码保留在内存中,因此不需要PHP实际读取文件(只检查其修改时间)。 FPM和apache模块不会影响任何内容