Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编写在操作码缓存上工作的PHP程序时应避免的事项_Php_Caching_Opcode - Fatal编程技术网

编写在操作码缓存上工作的PHP程序时应避免的事项

编写在操作码缓存上工作的PHP程序时应避免的事项,php,caching,opcode,Php,Caching,Opcode,如果我想支持PHP操作码缓存,我应该避免哪些事情?静态呼叫是邪恶的吗?那么“自动加载”呢?对于我在过去三年半中开发的每一个基于PHP的web应用程序,我总是在我使用的所有服务器上用作操作码缓存 。。。在开发过程中,我从来不用考虑任何“特殊”的东西:在任何情况下,使用APC和不使用APC都是透明的,唯一的区别在于性能 例如,我从来没有遇到过静态调用、自动加载等问题,也没有遇到过其他任何问题(我使用过两种不同的框架和OSS应用程序) 不过,有一个好习惯:如果您计划在生产服务器上使用APC,也可以在开

如果我想支持PHP操作码缓存,我应该避免哪些事情?静态呼叫是邪恶的吗?那么“自动加载”呢?

对于我在过去三年半中开发的每一个基于PHP的web应用程序,我总是在我使用的所有服务器上用作操作码缓存

。。。在开发过程中,我从来不用考虑任何“特殊”的东西:在任何情况下,使用APC和不使用APC都是透明的,唯一的区别在于性能

例如,我从来没有遇到过静态调用、自动加载等问题,也没有遇到过其他任何问题(我使用过两种不同的框架和OSS应用程序)


不过,有一个好习惯:如果您计划在生产服务器上使用APC,也可以在开发机器上使用它,以防万一——但在这些机器上启用该选项,这样您的生活就不会因为操作码缓存机制而变得复杂。

操作码缓存用于缓存脚本的编译版本。引擎盖下的Zend引擎总是在运行脚本之前将PHP脚本编译成更快的操作码,缓存将保存这些操作码。因此,在没有缓存的情况下,您的脚本将以完全相同的方式运行,只会更快地开始运行

缓存引擎通常查看PHP文件的时间戳(修改时间或mtime)。APC可以配置为查找每个请求的修改时间(默认值),但也可以配置为不检查修改时间,在这种情况下,您必须手动清除缓存以接受更改。请参见APC缓存的此设置:


很有趣。一个问题:如果我通过PHP修改一个PHP文件,我的操作码缓存会失效还是会继续使用过时的PHP文件?@Tower:对于APC(这是我唯一使用的操作码缓存),这取决于
APC.stat
配置指令的值:如果设置为
1
,修改将立即被看到;;如果设置为
0
,则除非清空操作码缓存(通常通过重新启动Apache来完成),否则不会看到修改;;在我的开发和登台机器上,我设置了apc.stat=1;在我的生产服务器上,我通常使用
apc.stat=0
,因为代码不经常更新;;当然,将其设置为
1
有一个成本(也不是很大,但也不是太小)——由您决定应该使用的值^^^有没有办法通过PHP手动清除缓存?我计划拥有一个自动更新功能,它将更新PHP文件-我想知道我是否可以使用apc.stat=0并在更新文件时清除缓存?
apc\u clear\u cache()
(请参阅)应该可以做到这一点-但是,在高负载的服务器上,我有时看到服务器在这样做时确实会受到影响-所以,我通常做的是Apache“优雅”重启,以避免服务器在高负载下崩溃(但我是从命令行执行的,这不是您想要做的…),使用
apc.stat=1
可能很好;;您不能删除一个文件的操作码缓存,但可以使用
apc\u compile\u file
重新编译它(请参阅)--我从未尝试过这一方法,它可能会奏效;-)