我刚刚将一个网站从 Linux 转移到 Windows,然后收到奇怪的致命错误消息。我的 Linux PHP 内存限制为 256MB,但从未出现过任何“内存不足”致命错误。
现在在 IIS 上我有相同的内存限制,但我收到了太多
PHP Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 32508940 bytes) in C:\...\functions.php on line 0
我尝试增加(400MB)看看会发生什么,这就是我得到的结果
PHP Fatal error: Allowed memory size of 419430400 bytes exhausted (tried to allocate 65013862 bytes) in C:\....\dbfunctions.php on line 1073741824
奇怪,这是同一个应用程序,相同的内存限制设置。同样奇怪的是,第二个错误显示“在第 1073741824 行”,但哇,该文件有 500 行。这是 Windows/IIS/PHP 问题吗?
我的配置:IIS 8.0、PHP 5.3.28、PHP 处理程序 php-cgi.exe
答案1
PHP 的 Windows 缓存扩展
似乎有大量问题都围绕着 PHP 的 Windows 缓存扩展,它为 php 设置了硬内存限制。
有示例和博客文章表明删除 wincache 可以解决问题,但这可能会对网站的性能产生不利影响。
在 IIS 中管理 PHP 内存
php.ini
- 位于根文件夹中。在 TextPad 中编辑并更改 momory_limit 的值。如果 4M 不够,则最多可设置为 8M,等等。在
admin.php
(如果你的错误出现在这里)后面添加一行内存限制,ini_set 'memory_limit', '12M'
如果你想添加 12MB 内存您可以添加一行到
.htaccess
:php_value memory_limit 32M
wp-config.php
可以控制内存。你输入一行,如下所示define('WP_MEMORY_LIMIT', '32M');
信息取自 phpbb.com 和 technet.microsoft.com