有没有办法定义PHP加载时在内存中持久存在的常量?

时间:2014-05-05 16:28:08

标签: php

有没有办法在服务器上启动PHP进程时定义引导到内存的常量?如果是这样,它可以用数组,类和函数完成吗?

在人们开始列出宣布跨页面和范围可用内容的不同方式之前:我从编码方便性,而不是性能角度来询问这一点。

在每次执行脚本时,继续从页面或数据库等加载永不改变的东西似乎是浪费。作为一个服务器端进程,我认为PHP有​​一些方法可以将内容读入内存并让它们始终可用。

2 个答案:

答案 0 :(得分:2)

您要找的是操作码缓存。操作码缓存通过将PHP文件的编译内容存储在共享内存中来工作,然后在将来包含/需要文件时使用该数据来短路标准代码解析过程。

此时规范操作码缓存是PHP opcache extension,但存在许多其他操作码缓存,包括APCXCache

操作码缓存不会缓存数据库中的数据。但是,您可以使用其他扩展来协助此过程,例如APCu将它们存储在共享内存中,或memcached将它们存储在外部进程中。但是,这些都不是自动的,因为从数据库缓存数据需要一些应用程序知识来了解缓存有用的内容,并在更新数据库时处理缓存失效。

答案 1 :(得分:1)

一般来说,php是一个单行程环境,它实际上并不是经常运行的(与java不同)。 Php仅在收到命令时才开始工作。然后它将代码解析为操作码并最终执行它。技术上发生在每个请求(或CLI命令)上。

但是,有几种方法可以缓存操作码而不需要太多努力使用APC:http://www.php.net/manual/en/book.apc.php