it-swarm-eu.dev

Jak používat více než 256 MB paměti v admin?

Stavím místo pro fotografa, který nahrává obrázky, které jsou normálně velké pro dnešní digitální fotoaparáty. Obrázky jsou velmi náročné na paměť, zejména operace s obrázky, jako je vytváření náhledů.

Tak jsem chtěl zvýšit limit paměti v admin nad 256 MB - jak to lze udělat? Povolil jsem CGI a PHP použít až 1 gigabajt, ale wordpress vždy snižuje paměť na 256 MB. Nějaký nápad, jak opravit, že na straně klienta, který musí být schopen auto-update?

UPDATE: Z Wordpressu 3.2 bude opět nastaven maximální limit paměti v aplikaci Wordpress .

10
hakre

Teoreticky editujeme config.php a přidáme tento řádek before wp-settings.php zahrnutí.

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

zvýšit limit paměti pro WordPress na 256 MB nebo jakoukoliv nastavenou hodnotu. A to bude fungovat na celém světě. Nicméně, jak sorich87 poukázal , tam je nemnoho funkcí, které budou měnit toto nastavení s tvrdým kódovaným 256 MB limitem.

Pro zaseknutí nebo ne Hack

Trochu znepokojení o tom, WP_MEMORY_LIMIT je jedním z nejvíce podivných WP nastavení, se kterými jsem se setkal. pokud zaškrtnete /wp-includes/default-constants.php toto nastavení najdete:

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

Nikdy si neuvědomuji, že WP nastaví jeho výchozí využití paměti tak nízko, dokud to nenajdu v WP codex:

WordPress automaticky zkontroluje, zda PHP bylo přiděleno méně paměti než zadaná hodnota před použitím této funkce. Například, pokud PHP bylo přiděleno 64MB, není třeba tuto hodnotu nastavovat na 64M, protože WordPress automaticky použije všech 64MB, pokud to bude nutné. ( source )

To vysvětlení se ulevilo. Nicméně, použití tvrdé kódované @ini_set('memory_limit', '256M'); everytime WP execute funkce, která potřebuje více paměti je nikdy zmínil . Ve skutečnosti nenacházím žádné vysvětlení o tomto nejasném chování z kodexu WP. Vzhledem k tomu, že většina funkcí, které se netýkají uživatele, buď není dokumentována, nebo není jasně vysvětlena v kodexu.

I když toto nastavení funguje na většině případů pěkně, bude tyto funkce zbytečné na serveru s nižším nastavením max. Paměti nebo na vašem případě, s vyšším využitím paměti.

Dokud WP kluci toto neopraví, myslím, že vaším jediným řešením je upravit jádro. Můžete najít tento příspěvek napsal hakre zajímavé číst. On také předloží patch doporučení v Trac. Předchozí odkaz na soubor záplaty vám může pomoci najít seznam funkcí, které toto nastavení používají.

upravit:

toto je ta nejhloupější odpověď, jakou jsem kdy dal, protože dávám odkaz na svůj vlastní příspěvek (jen si uvědomte, že jméno OP bylo hakre po 2 dnech): D

upravit 2:

jak je uvedeno v komentáři, toto bylo opraveno 3.2 release

13
bangbambang

Swill - měl jsem stejné problémy. Sakra wordpress s některými z "funkcí" Spíše sofistikovanějším přístupem je změna všech @ini_setů, které mají být nastaveny z WP_MEMORY_LIMIT - vyřešený problém

Také změna hodnot PHP za běhu není tak chytrá, neví, proč je implementována: (

1
neosk

Před načtením snímků do paměti pomocí funkcí Gd jsou zde @ini_set('memory_limit', '256M');.

imagecreatefromstring() (řádek 253, wp-includes/media.php) je použito wp_load_image(), které je použito image_resize (funkce byla zpracována pro vytvoření miniatur). Limit paměti je na řádku 252, takže, pokud vidím, neexistuje žádný způsob, jak to změnit bez zabití kotě *> :).

V load_image_to_edit() jsou také funkce Gd (řádek 200, wp-admin/includes/image-edit.php). Tenhle je používán editorem obrázků (používal jsem ho, protože vím, že WordPress vím, ani to nebylo) :). Pokud ji klient používá, můžete nastavit limit paměti také tam. Je zde filtr load_image_to_edit_path.

Doufám, že moje odpověď je užitečná.

hackování jádra

1
sorich87

Jen jsem chtěl říct díky bangbambangu. Toto je první příspěvek, který jsem našel a který mi umožnil nahlédnout do toho, proč se zápis do wp-config.php define('WP_MEMORY_LIMIT', '512M'); ve skutečnosti nepoužívá. Strávil jsem hodiny a snažil jsem se to zjistit ...

Můj import selhal s vyčerpaným problémem 256 MB bez ohledu na to, jak jsem nastavil limit paměti.

Zde jsou místa, kde je limit paměti hardcoded na 256M (ve verzi 3.0.5 stejně).

wp-admin/includes/file.php (line 532)

wp-admin/includes/image-edit.php (line 393 & 498)

wp-includes/media.php (line 252)
0
user3048

Váš popis Myslím, že tento kód v admin.php je problém:

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

Poněkud podivné, že zachází s použitím paměti správce odděleně, ale alespoň je filtrovatelný.

0
Rarst