Como usar mais de 256MB de memória no admin?

10

Estou criando um site para um fotógrafo que envia fotos que normalmente são grandes para as câmeras digitais de hoje. As imagens consomem muita memória, especialmente as operações de imagem, como a criação de miniaturas.

Então eu queria aumentar o limite de memória no administrador acima de 256MB - como isso pode ser feito? Eu permiti que CGI e PHP usassem até 1 Gigabyte, mas o wordpress sempre diminui a memória para 256MB. Alguma ideia de como corrigir isso em um lado do cliente que precisa ser capaz de atualizar automaticamente?

ATUALIZAÇÃO: O Wordpress 3.2 em andamento no limite máximo de memória do Wordpress será novamente configurável .

    
por hakre 26.10.2010 / 11:21

6 respostas

13

Teoricamente, edite seu config.php e adicione esta linha antes da inclusão de wp-settings.php.

define('WP_MEMORY_LIMIT', '256M');

deve aumentar o limite de memória do WordPress para 256 MB ou qualquer valor que você definir. E isso funcionará em todo o site. No entanto, como sorich87 apontado , há algumas funções que alterarão essa configuração com limite de 256 MB codificados.

Para hackear ou não o hacker

Um pouco de preocupação sobre isso, WP_MEMORY_LIMIT é uma das configurações mais estranhas do WP que encontrei. Se você marcar /wp-includes/default-constants.php , encontrará esta configuração:

// set memory limits
if ( !defined('WP_MEMORY_LIMIT') ) {
    if( is_multisite() ) {
        define('WP_MEMORY_LIMIT', '64M');
    } else {
        define('WP_MEMORY_LIMIT', '32M');
    }
}

Eu nunca percebi que o WP irá definir seu uso de memória padrão tão baixo, até que eu encontre isso no codex do WP:

  

O WordPress verificará automaticamente se o PHP recebeu menos memória do que o valor digitado antes de utilizar esta função. Por exemplo, se o PHP foi alocado 64MB, não há necessidade de definir este valor para 64M, já que o WordPress usará automaticamente todos os 64MB, se necessário. ( source )

Essa explicação foi aliviada. No entanto, o uso de @ini_set('memory_limit', '256M'); toda vez que o WP executa funções que precisam de mais memória é nunca mencionado . Na verdade, não encontro nenhuma explicação sobre esse comportamento vago do códice do WP. Já que a maioria das funções não relacionadas ao usuário não são documentadas ou não explicadas claramente no códice.

Embora essa configuração funcione bem na maioria dos casos, ela tornará essas funções inúteis no servidor com configuração de memória máxima mais baixa ou, no seu caso, maior uso de memória.

Até que o pessoal do WP conserte isso, acho que sua única solução é modificar o núcleo. Você pode encontrar este post escrito por hakre interessante ler . Ele também envia uma recomendação de patch no Trac. O link anterior para o arquivo de patch pode ajudá-lo a encontrar uma lista de funções que usam essa configuração.

edit:

esta é a resposta mais idiota que eu já dei porque Eu dou um link para o seu próprio post (apenas perceba que o nome do OP foi hakre após 2 dias): D

edit 2:

como mencionado no comentário, isso foi corrigido pela versão 3.2

    
por bangbambang 26.10.2010 / 17:27
1

Existem @ini_set('memory_limit', '256M'); antes de as imagens serem carregadas na memória pelas funções GD.

imagecreatefromstring() (linha 253, wp-includes / media.php) é usado por wp_load_image() , que é usado por image_resize (a função onde o processamento de imagens é feito para criação de miniaturas). O limite de memória está na linha 252, então, até onde eu posso ver, não há como modificá-lo sem matar um gatinho * > :).

Existem também funções GD em load_image_to_edit() (linha 200, wp-admin / includes / image-edit.php). Este é usado pelo editor de imagens (eu nunca usei, desde que eu conheço o WordPress, nem sabia que iria encontrá-lo :)). Se o seu cliente usá-lo, você pode querer definir o limite de memória também. Existe o filtro load_image_to_edit_path .

Espero que minha resposta seja útil.

* núcleo de hackers

    
por sorich87 26.10.2010 / 14:41
1

Swill - Eu tive apenas os mesmos problemas. Porra wordpress com alguns dos "recursos" Uma abordagem mais sofisticada é alterar todos os @ini_set's para configurá-los a partir de WP_MEMORY_LIMIT - problema resolvido

Além disso, alterar os valores do PHP em tempo de execução não é tão inteligente, não sei por que ele é implementado: (

    
por neosk 10.05.2011 / 01:30
0

Por sua descrição, acho que esse código em admin.php é o problema:

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

Algo estranho que trata o uso da memória do administrador separadamente, mas pelo menos é filtrável.

    
por Rarst 26.10.2010 / 11:41
0

Eu só queria agradecer ao bangbambang. Este é o primeiro post que encontrei que foi capaz de me dar algumas dicas sobre por que a entrada em wp-config.php de define('WP_MEMORY_LIMIT', '512M'); não estava sendo usada. Passei horas tentando descobrir isso ...

Minha importação estava falhando com o problema esgotado de 256M, independentemente de como eu configurei o limite de memória.

Aqui estão os lugares onde o limite de memória é codificado para 256M (na versão 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)
    
por user3048 09.02.2011 / 23:18
-4
/* Memory Limit */
define( 'WP_MEMORY_LIMIT', '1G' );
define( 'WP_MAX_MEMORY_LIMIT', '1G');
    
por Anton 22.03.2016 / 07:48