管理者が256MBを超えるメモリを使用する方法


10

今日のデジタルカメラでは通常大きい写真をアップロードする写真家のためのサイトを構築しています。画像はメモリを大量に消費します。特に、サムネイルの作成などの画像操作は重要です。

だから私は256MB以上の管理者のメモリ制限を上げたかった-これはどのように行うことができますか?CGIとPHPで最大1ギガバイトを使用することを許可しましたが、ワードプレスは常にメモリを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 -Hej!これをワードプレスで解決したいと思っています。サムネイルサーバーをセットアップする必要がある場合は、とにかくワードプレスを使用しません。しかし、リンクをありがとう、少なくとも非常に興味深い:)。
ハクレ

回答:


13

理論的には、config.phpを編集し、wp-settings.phpを含めるにこの行を追加します。

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

すべきである 256メガバイトへのWordPressのあなたのメモリ制限を上げたり、何でもあなたが設定した値。そして、これはサイト全体で機能します。ただし、sorich87が指摘したように、ハードコーディングされた256 MBの制限でこの設定を変更する関数はほとんどありません。

ハックするかしないか

これに関する少しの懸念WP_MEMORY_LIMITは、私が遭遇した最も奇妙なWP設定の1つです。チェック/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 codexでこれが見つかるまで、WPがデフォルトのメモリ使用量を非常に低く設定することに気づきませんでした。

WordPressは、この関数を使用する前に、入力された値よりも少ないメモリがPHPに割り当てられているかどうかを自動的にチェックします。たとえば、PHPに64MBが割り当てられている場合、WordPressは必要に応じてすべての64MBを自動的に使用するため、この値を64Mに設定する必要はありません。(ソース

その説明はほっとした。ただし、@ini_set('memory_limit', '256M');WPがより多くのメモリを必要とする関数を実行するたびにハードコードされる使用法については言及されていません。実際、WP codexからのこのあいまいな動作についての説明はありません。ユーザーに関連しない機能のほとんどは、文書化されていないか、コーデックスで明確に説明されていないためです。

この設定はほとんどの場合にうまく機能しますが、最大メモリ設定が低いサーバーではこれらの機能は役に立たなくなります。

WPの人たちがこれを修正するまで、私はあなたの唯一の解決策はコアを変更することだと思います。あなたはhakreによって書かれたこの投稿を読むのが面白いかもしれません。また、Tracでパッチの推奨を提出します。パッチファイルへの以前のリンクは、この設定を使用する関数のリストを見つけるのに役立つ場合があります。

編集:

これは私があなたの投稿へのリンクを提供しているので、私がこれまでに提供した中で最も愚かな答えです(2日後にOP名がハッカーであったことを理解してください):D

編集2:

コメントで述べたように、これは3.2リリースで修正されました


あなたの答えは愚かなことから遠く離れています。正確には、私がすでに答えを知っていたのに、私がこの質問を投稿するのはちょっとばかでした、そしてあなたのコメントはあなたが実際にそれを実行したことを完全に示しています。本当に、私の最大の謝罪、ここにリンクを投稿することは、質問を投稿している間私が知っている限りにおいて正しかったので、何を言うべきですか?それを認めてくれてありがとう!私はあなたのスタイルが好きで、私のブログをあなたの回答にリンクしました(ブログにリンクしているだけではありません)。
hakre

3.2では、これは構成可能である必要があります。チェンジセット17749
11

1

@ini_set('memory_limit', '256M');GD関数によって画像がメモリに読み込まれる前にあります。

imagecreatefromstring()(253行目、wp-includes / media.php)によって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-同じ問題が発生しました。いくつかの「機能」でワードプレスを酷評するかなり洗練されたアプローチは、すべての@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

バンバンバンのおかげで言いたかっただけです。これは、wp-config.phpへのエントリdefine('WP_MEMORY_LIMIT', '512M');が実際に使用されなかった理由を理解するのに役立つ最初の投稿です。私はこれを理解するために何時間も費やしました...

メモリ制限の設定方法に関係なく、インポートが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
ハクレ

-4
/* Memory Limit */
define( 'WP_MEMORY_LIMIT', '1G' );
define( 'WP_MAX_MEMORY_LIMIT', '1G');
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.