我正在为摄影师创建一个网站,该摄影师上传的照片通常对于当今的数码相机来说是很大的。图像占用大量内存,尤其是诸如创建缩略图之类的图像操作。
因此,我想将管理员的内存限制提高到256MB以上-如何做到这一点?我允许CGI和PHP最多使用1 GB,但是wordpress总是将内存减少到256MB。知道如何在需要自动更新的客户端上解决此问题吗?
我正在为摄影师创建一个网站,该摄影师上传的照片通常对于当今的数码相机来说是很大的。图像占用大量内存,尤其是诸如创建缩略图之类的图像操作。
因此,我想将管理员的内存限制提高到256MB以上-如何做到这一点?我允许CGI和PHP最多使用1 GB,但是wordpress总是将内存减少到256MB。知道如何在需要自动更新的客户端上解决此问题吗?
Answers:
理论上,编辑config.php并在 wp-settings.php包含之前添加此行。
define('WP_MEMORY_LIMIT', '256M');
应该将WordPress的内存限制提高到256MB或您设置的任何值。这将在整个网站上正常工作。但是,正如sorich87指出的那样,很少有功能会以硬编码的256 MB限制更改此设置。
要砍还是不砍
对此WP_MEMORY_LIMIT
我有点担心,这是我遇到的最奇怪的WP设置之一。如果您检查/wp-includes/default-constants.php
,将会发现以下设置:
// set memory limits
if ( !defined('WP_MEMORY_LIMIT') ) {
if( is_multisite() ) {
define('WP_MEMORY_LIMIT', '64M');
} else {
define('WP_MEMORY_LIMIT', '32M');
}
}
我从来没有意识到WP会将它的默认内存使用率设置得如此之低,直到在WP Codex中找到它:
WordPress将在使用此功能之前自动检查是否为PHP分配的内存少于输入的值。例如,如果PHP已经分配64MB,没有必要将此值设置为64M为WordPress会自动使用所有64MB如果需要的话。(来源)
这种解释令人安心。但是,从未提及@ini_set('memory_limit', '256M');
需要更多内存的每次WP执行功能的硬编码用法。实际上,我从WP Codex中找不到关于这种模糊行为的解释。由于大多数非用户相关功能未在文档中记录或未明确解释。
尽管此设置在大多数情况下都能很好地发挥作用,但会使这些功能在具有最大内存设置较低的服务器上或在您的情况下具有较高的内存使用率的服务器上无用。
在WP专家解决此问题之前,我认为您唯一的解决方案是修改内核。您可能会发现这个帖子由hakre有趣的书面阅读。他还在Trac中提交了补丁建议。修补程序文件的上一个链接可能会帮助您查找使用此设置的功能列表。
编辑:
这是我所给出的最愚蠢的答案,因为我给自己的帖子提供了链接(只要意识到OP名称在2天后就被骗了):D
编辑2:
如评论所述,此问题已在3.2版本中修复
有@ini_set('memory_limit', '256M');
图像在内存GD功能加载之前。
imagecreatefromstring()
(线253,WP-包括/忽略原始)用于通过wp_load_image()
其中使用由image_resize
(函数分别为缩略图创建完成处理图像)。内存限制在第252行,因此,据我所知,没有办法在不杀死小猫的情况下修改它*::)。
load_image_to_edit()
(第200行,wp-admin / includes / image-edit.php)中也有GD功能。这是由图像编辑器使用的(我需要使用它,因为我知道WordPress,甚至都不知道要找到它:))。如果您的客户端使用它,则可能还要在此处设置内存限制。有过滤器load_image_to_edit_path
。
希望我的回答对您有所帮助。
*黑客核心
WP_MEMORY_LIMIT
常量,甚至是一个admin_memory_limit
过滤器,但是在这少数情况下都没有参考。
我只想对邦邦邦表示感谢。这是我发现的第一篇文章,它使我对为什么define('WP_MEMORY_LIMIT', '512M');
未真正使用进入wp-config.php的原因有一些了解。我花了几个小时试图找出答案...
无论我如何设置内存限制,我的导入都将失败并显示256M耗尽。
这是将内存限制硬编码为256M(无论如何在3.0.5版中)的地方。
wp-admin/includes/file.php (line 532)
wp-admin/includes/image-edit.php (line 393 & 498)
wp-includes/media.php (line 252)