如何在管理员中使用超过256MB的内存?


10

我正在为摄影师创建一个网站,该摄影师上传的照片通常对于当今的数码相机来说是很大的。图像占用大量内存,尤其是诸如创建缩略图之类的图像操作。

因此,我想将管理员的内存限制提高到256MB以上-如何做到这一点?我允许CGI和PHP最多使用1 GB,但是wordpress总是将内存减少到256MB。知道如何在需要自动更新的客户端上解决此问题吗?

更新: 从Wordpress 3.2开始,Wordpress中的最大内存限制将再次可配置


嘿,好久没见到你了。猜猜你一直在和客户忙。对你有益!您是否考虑过使用Amazon S3和EC2减轻图像处理的负担?aws.amazon.com/articles/1602还是Google App Engine?code.google.com/appengine/docs/python/images/usingimages.html还是使用urlimg.com
MikeSchinkel

@MikeSchnikel-嘿!我正在寻找用wordpress解决这个问题。如果我需要设置缩略图服务器,无论如何我不会使用wordpress。但是,感谢您的链接,至少非常有趣:)。
hakre 2010年

Answers:


13

理论上,编辑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版本中修复


您的答案绝非愚蠢。确切地说,这是我在已经知道答案的同时发布此问题的愚蠢行为,而您的评论完全表明您确实对此有所顾忌。真的,我最大的歉意是,在发布问题时,据我所知我就在此处发布链接,那该说些什么呢?感谢您公开承认这一点!我喜欢您的风格,并将我的博客链接到您的答案(不仅链接回博客)。
hakre 2011年

在3.2中,这应该是可配置的:Changeset 17749
hakre 2011年

1

@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过滤器,但是在这少数情况下都没有参考。
Annika Backstrom

1

Swill-我有同样的问题。该死的wordpress具有某些“功能”一个更复杂的方法是更改​​所有@ini_set,以从WP_MEMORY_LIMIT进行设置-问题已解决

此外,在运行时更改php值不是很聪明,不确定为什么要实现它:(


0

根据您的描述,我认为其中的代码admin.php是问题所在:

if ( current_user_can( 'manage_options' ) )
    @ini_set( 'memory_limit', apply_filters( 'admin_memory_limit', '256M' ) );

它单独处理管理员内存使用情况有些奇怪,但至少它是可过滤的。


这不适用于管理员中的图像操作。无论我是否使用该过滤器,它们都会再次减小到256MB。:/
hakre

0

我只想对邦邦邦表示感谢。这是我发现的第一篇文章,它使我对为什么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)

票证#13847附带一个修补程序,可使用一个名为的附加常量使这些地方可配置WP_MAX_MEMORY_LIMIT
hakre 2011年

-4
/* Memory Limit */
define( 'WP_MEMORY_LIMIT', '1G' );
define( 'WP_MAX_MEMORY_LIMIT', '1G');
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.