2024年PHP日本大会

运行时配置

这些函数的行为受php.ini中的设置影响。

下表列出了WinCache扩展提供的配置设置并对其进行了说明

WinCache 配置选项
名称 默认值 最小值 最大值 可更改 变更日志
wincache.fcenabled "1" "0" "1" INI_ALL 自 WinCache 1.0.0 起可用
wincache.fcenabledfilter "NULL" "NULL" "NULL" INI_SYSTEM 自 WinCache 1.0.0 起可用
wincache.fcachesize "24" "5" "255" INI_SYSTEM 自 WinCache 1.0.0 起可用
wincache.fcndetect "1" "0" "1" INI_SYSTEM 自 WinCache 1.1.0 起可用
wincache.maxfilesize "256" "10" "2048" INI_SYSTEM 自 WinCache 1.0.0 起可用
wincache.ocenabled "1" "0" "1" INI_ALL 自 WinCache 1.0.0 起可用。自 2.0.0.0 起移除。
wincache.ocenabledfilter "NULL" "NULL" "NULL" INI_SYSTEM 自 WinCache 1.0.0 起可用。自 2.0.0.0 起移除。
wincache.ocachesize "96" "15" "255" INI_SYSTEM 自 WinCache 1.0.0 起可用。自 2.0.0.0 起移除。
wincache.filecount "4096" "1024" "16384" INI_SYSTEM 自 WinCache 1.0.0 起可用
wincache.chkinterval "30" "0" "300" INI_SYSTEM 自 WinCache 1.0.0 起可用
wincache.ttlmax "1200" "0" "7200" INI_SYSTEM 自 WinCache 1.0.0 起可用
wincache.enablecli 0 0 1 INI_SYSTEM 自 WinCache 1.0.0 起可用
wincache.ignorelist NULL NULL NULL INI_ALL 自 WinCache 1.0.0 起可用
wincache.namesalt NULL NULL NULL INI_SYSTEM 自 WinCache 1.0.0 起可用
wincache.ucenabled 1 0 1 INI_SYSTEM 自 WinCache 1.1.0 起可用
wincache.ucachesize 8 5 85 INI_SYSTEM 自 WinCache 1.1.0 起可用
wincache.scachesize 8 5 85 INI_SYSTEM 自 WinCache 1.1.0 起可用
wincache.rerouteini NULL NULL NULL INI_SYSTEM 自 WinCache 1.2.0 起可用。自 1.3.7 起移除。
wincache.reroute_enabled 1 0 1 INI_SYSTEM|INI_PERDIR 自 WinCache 1.3.7 起可用
wincache.srwlocks 1 0 1 INI_SYSTEM 自 WinCache 1.3.6.3 起可用。自 2.0.0.0 起移除。
wincache.filemapdir NULL NULL NULL INI_SYSTEM 自 WinCache 1.3.7.4 起可用
有关 INI_* 模式的更多详细信息和定义,请参见配置设置的设置位置

以下是配置指令的简短说明。

wincache.fcenabled bool
启用或禁用文件缓存功能。
wincache.fcenabledfilter string
定义一个以逗号分隔的IIS网站标识符列表,在这些网站上应启用或禁用文件缓存。此设置与wincache.fcenabled一起使用:如果wincache.fcenabled设置为1,则wincache.fcenabledfilter中列出的站点将关闭文件缓存;如果wincache.fcenabled设置为0,则wincache.fcenabledfilter中列出的站点将打开文件缓存。
wincache.fcachesize int
定义为文件缓存分配的最大内存大小(以兆字节为单位)。如果所有缓存文件的总大小超过此设置中指定的值,则将从文件缓存中移除最旧的文件。
wincache.fcndetect bool
启用或禁用文件更改通知检测功能。如果支持文件更改通知,则将在相应文件在文件系统上修改后立即使用它来刷新操作码和文件缓存条目。如果不支持文件更改通知(例如,当使用网络文件共享时),则wincache将按wincache.chkinterval指定的定期时间间隔轮询文件更改。
wincache.maxfilesize int
定义单个文件的最大允许大小(以千字节为单位),该文件可被缓存。如果文件大小超过指定值,则不会缓存该文件。此设置仅适用于文件缓存。
wincache.ocenabled bool
警告

此选项自 2.0.0.0 起已被移除

启用或禁用操作码缓存功能
wincache.ocenabledfilter string
警告

此选项自 2.0.0.0 起已被移除

定义一个以逗号分隔的IIS网站标识符列表,在这些网站上应启用或禁用操作码缓存。此设置与wincache.ocenabled一起使用:如果wincache.ocenabled设置为1,则wincache.ocenabledfilter中列出的站点将关闭操作码缓存;如果wincache.ocenabled设置为0,则wincache.ocenabledfilter中列出的站点将打开操作码缓存。
wincache.ocachesize int
警告

此选项自 2.0.0.0 起已被移除

定义为操作码缓存分配的最大内存大小(以兆字节为单位)。如果缓存的操作码大小超过指定值,则将从缓存中移除最旧的操作码。请注意,操作码缓存大小必须至少是文件缓存大小的3倍。如果不是这种情况,则操作码缓存大小将自动增加。
wincache.filecount int
定义扩展程序预计要缓存的文件数量,以便在启动时分配适当的内存大小。如果文件数量超过指定值,WinCache将根据需要重新分配更多内存。
wincache.chkinterval int
定义扩展程序检查文件更改以刷新缓存的频率(以秒为单位)。将其设置为0将禁用缓存的刷新。除非缓存条目被清除程序移除,或者IIS应用程序池被回收,或者调用wincache_refresh_if_changed函数,否则文件更改不会反映在缓存中。
wincache.ttlmax int
定义缓存条目在未使用时的最大生存时间(以秒为单位)。将其设置为0将禁用缓存清除程序,因此在IIS工作进程的生命周期内,缓存条目将永远不会从缓存中移除。
wincache.enablecli bool
定义在PHP以命令行(CLI)模式运行时是否启用缓存。
wincache.ignorelist string

定义扩展程序不应缓存的文件列表。文件列表仅使用文件名指定,并以管道符号“|”分隔。

示例 1 wincache.ignorelist 示例

wincache.ignorelist = "index.php|misc.php|admin.php"

wincache.namesalt string
定义一个字符串,该字符串将在命名存储在共享内存中的扩展程序专用对象时使用。这是为了避免冲突,这些冲突可能是由于IIS工作进程中的其他应用程序试图访问共享内存而造成的。namesalt字符串的长度不能超过8个字符。
wincache.ucenabled bool
启用或禁用用户缓存功能。
wincache.ucachesize int
定义为用户缓存分配的最大内存大小(以兆字节为单位)。如果存储在用户缓存中的变量的总大小超过指定值,则将从缓存中移除最旧的变量。
wincache.scachesize int
定义为会话缓存分配的最大内存大小(以兆字节为单位)。如果存储在会话缓存中的数据的总大小超过指定值,则将从缓存中移除最旧的数据。
wincache.rerouteini 字符串
警告

自 1.3.7 版本起,此选项已被移除。自 1.3.7 版本起,请参见wincache.reroute_enabled 获取类似的功能。

指定 reroute.ini 文件的绝对路径或相对路径,该文件包含应将其实现替换为 WinCache 函数等效项的 PHP 函数列表。如果指定相对路径,则假定它相对于 php-cgi.exe 文件的位置。
wincache.reroute_enabled 布尔值
启用或禁用通过文件缓存重新路由某些文件 I/O 函数。
wincache.srwlocks 布尔值
警告

此选项自 2.0.0.0 起已被移除

启用或禁用共享读写锁的使用。在对 WinCache 中的死锁情况进行故障排除时,禁用此功能很有用。
wincache.filemapdir 字符串
指定 WinCache 将用于共享内存段的临时文件存储在其中的目录的绝对路径。 此目录必须位于本地计算机上,而不能位于网络文件系统上。 如果未指定目录,WinCache 将对所有共享内存段使用 Windows 系统页面文件。

添加注释

用户贡献注释 2 条注释

ericsten at php dot net
9 年前
[编辑注:已更正错别字]

关于我最近在调试 WinCache 问题时发现的一些内容的简短说明

如果更改 wincache.scachesize 值,则必须关闭所有 php-cgi.exe 实例并手动删除 wincache_session_*.tmp 文件。

wincache_session_*.tmp 文件位于 php.ini 文件中 session.save_path 指定的目录中。

一个示例会话文件名如下所示:wincache_session_1_565779.tmp

如果不删除此文件,WinCache 会话处理程序的跨进程共享内存段将会出现损坏。这将显示为 IIS 服务器的 500 错误。

谢谢!

--E.
software journalist
4 年前
会话缓存概述中的 wincache.php 显示可用内存返回的是 NAN B。

谷歌搜索没有返回与此相关的具体内容。

停止应用程序池并删除 windows temp 目录中的 *session*.tmp 文件解决了此问题。(感谢之前的注释者)
To Top