web-dev-qa-db-ja.com

管理者に256MB以上のメモリを使用させるにはどうすればいいですか?

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

それで、私は管理者のメモリ制限を256MB以上にしたいと思いました - どうすればこれができますか?私はCGIとPHPが1ギガバイトまで使えるようにしましたが、ワードプレスは常に256MBまでメモリを減らします。自動更新ができるようにする必要があるクライアント側でそれを修正する方法がありますか?

更新: Wordpress 3.2以降、Wordpressの最大メモリ制限は再び設定可能になります

10
hakre

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

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

shouldWordPressのメモリ制限を256MBまたは設定した値に引き上げます。そして、これはサイト全体で機能します。ただし、 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に設定する必要はありません。( source

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

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

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

編集:

私はあなた自身の投稿へのリンクを与える (OP名がhakre2日後):D

編集2:

コメントで述べたように、これは .2リリースで修正

13
bangbambang

Swill - 同じ問題がありました。いくつかの「機能」を使った気の利いたワードプレスより洗練されたアプローチは、すべての@ini_setをWP_MEMORY_LIMITから設定するように変更することです - 問題は解決しました

また、実行時にphp値を変更することはそれほど賢くはありません、なぜそれが実装されているのかわからない:(

1
neosk

Gd関数によってイメージがメモリにロードされる前に@ini_set('memory_limit', '256M');があります。

imagecreatefromstring()(253行目、wp-includes/media.php)は、image_resizeによって使用されるwp_load_image()によって使用されます(この機能は、画像処理がサムネイル作成のために行われるものです)。メモリ制限は252行目なので、私の知る限りでは、子猫を殺さずにそれを変更する方法はありません*> :)。

load_image_to_edit()にはGd関数もあります(200行目、wp-admin/includes/image-edit.php)。これは画像エディタによって使用されます(私はWordPressを知っているので、それを見つけることであることさえ知らなかったので、私はそれを使いました)。あなたのクライアントがそれを使うのであれば、あなたもそこでメモリ制限を設定したいかもしれません。フィルタload_image_to_edit_pathがあります。

私の答えが参考になることを願っています。

*ハッキングコア

1
sorich87

Bangbambangのおかげで私はただ言いたいと思いました。これが私が見つけた最初の投稿で、なぜ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)
0
user3048

admin.phpのこのコードが問題だと思います。

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

管理メモリの使用量を別々に扱うのは少々不思議ですが、少なくともフィルタは可能です。

0
Rarst