Bagaimana cara menggunakan lebih dari 256MB memori di admin?

10

Saya sedang membangun situs untuk fotografer yang mengunggah gambar yang biasanya besar untuk kamera digital saat ini. Gambar cukup intensif memori, terutama operasi gambar seperti membuat thumbnail.

Jadi saya ingin menaikkan batas memori di admin di atas 256MB - bagaimana ini bisa dilakukan? Saya mengizinkan CGI dan PHP untuk menggunakan hingga 1 Gigabyte tetapi wordpress selalu mengurangi memori hingga 256MB. Adakah yang tahu bagaimana cara memperbaikinya di sisi klien yang harus dapat melakukan pembaruan otomatis?

PEMBARUAN: Dari Wordpress 3.2 yang sedang berlangsung batas memori maksimum di Wordpress akan dapat dikonfigurasi lagi .

hakre
sumber
hei, sudah lama tidak melihatmu. Kira Anda sudah sibuk dengan klien; bagus untukmu! Sudahkah Anda mempertimbangkan untuk mengurangi pemrosesan gambar, mungkin menggunakan Amazon S3 dan EC2? aws.amazon.com/articles/1602 Atau Google App Engine? code.google.com/appengine/docs/python/images/usingimages.html Atau menggunakan urlimg.com ?
MikeSchinkel
@MikeSchnikel - Hej! Saya ingin menyelesaikan ini dengan wordpress. Jika saya perlu mengatur server thumbnail saya tetap tidak akan menggunakan wordpress. Tapi terima kasih atas tautannya, setidaknya sangat menarik :).
hakre

Jawaban:

13

Secara teoritis, edit config.php Anda dan tambahkan baris ini sebelum dimasukkannya wp-settings.php.

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

seharusnya menaikkan batas memori Anda untuk WordPress menjadi 256MB atau nilai apa pun yang Anda tetapkan. Dan ini akan bekerja di seluruh tempat. Namun, seperti yang ditunjukkan sorich87 , ada beberapa fungsi yang akan mengubah pengaturan ini dengan batas 256 MB berkode keras.

Untuk Meretas atau Tidak Meretas

Sedikit kekhawatiran tentang ini, WP_MEMORY_LIMITadalah salah satu pengaturan WP paling aneh yang pernah saya temui. jika Anda memeriksa /wp-includes/default-constants.phpAnda akan menemukan pengaturan ini:

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

Saya tidak pernah menyadari bahwa WP akan menetapkan penggunaan memori standarnya sangat rendah, sampai saya menemukan ini dalam WP codex:

WordPress akan secara otomatis memeriksa apakah PHP telah dialokasikan lebih sedikit memori daripada nilai yang dimasukkan sebelum menggunakan fungsi ini. Misalnya, jika PHP telah dialokasikan 64MB, tidak perlu mengatur nilai ini ke 64M karena WordPress akan secara otomatis menggunakan semua 64MB jika perlu. ( Sumber )

Penjelasan itu melegakan. Namun, penggunaan hard coded @ini_set('memory_limit', '256M');setiap kali menjalankan fungsi WP yang membutuhkan lebih banyak memori tidak pernah disebutkan . Bahkan, saya tidak menemukan penjelasan tentang perilaku yang tidak jelas ini dari WP codex. Karena sebagian besar fungsi yang tidak berhubungan dengan pengguna tidak didokumentasikan atau tidak dijelaskan dengan jelas dalam codex.

Meskipun pengaturan ini berfungsi dengan baik pada kebanyakan kasus, ini akan membuat fungsi-fungsi itu tidak berguna di server dengan pengaturan memori maks yang lebih rendah atau pada kasus Anda, penggunaan memori yang lebih tinggi.

Sampai WP guys memperbaiki ini, saya pikir satu-satunya solusi Anda adalah memodifikasi inti. Anda mungkin menemukan posting ini ditulis oleh hakre menarik untuk dibaca. Dia juga mengirimkan rekomendasi tambalan di Trac. Tautan sebelumnya ke file tambalan dapat membantu Anda menemukan daftar fungsi yang menggunakan pengaturan ini.

edit:

ini adalah jawaban paling bodoh yang pernah saya berikan karena saya memberikan tautan ke posting Anda sendiri (baru sadar bahwa nama OP adalah hakre setelah 2 hari): D

edit 2:

seperti yang disebutkan pada komentar, ini telah diperbaiki oleh rilis 3.2

bangbambang
sumber
jawaban Anda jauh dari bodoh. Untuk lebih tepatnya itu agak bodoh dari saya memposting pertanyaan ini sementara saya sudah tahu jawabannya, dan komentar Anda benar-benar menunjukkan bahwa Anda secara faktual menabraknya. Sungguh, permintaan maaf terbesar saya, memposting tautan di sini sejauh yang saya tahu saat memposting pertanyaan, jadi apa yang harus saya katakan? Terima kasih sudah terbuka untuk mengakuinya! Saya suka gaya Anda dan menautkan blog saya ke jawaban Anda (tidak hanya tertaut kembali ke blog).
hakre
Dalam 3.2 ini harus dapat dikonfigurasi:
Changeset
1

Ada @ini_set('memory_limit', '256M');sebelum gambar dimuat dalam memori oleh fungsi GD.

imagecreatefromstring()(baris 253, wp-include / media.php) digunakan oleh wp_load_image()yang digunakan oleh image_resize(fungsi pemrosesan gambar dilakukan untuk pembuatan thumbnail). Batas memori ada pada baris 252, jadi, sejauh yang saya bisa lihat, tidak ada cara untuk memodifikasinya tanpa membunuh anak kucing *> :).

Ada juga fungsi GD di load_image_to_edit()(baris 200, wp-admin / include / image-edit.php). Yang ini digunakan oleh editor gambar (saya pernah menggunakannya, karena saya tahu WordPress, bahkan tidak tahu harus menemukannya :)). Jika klien Anda menggunakannya, Anda mungkin ingin mengatur batas memori di sana juga. Ada filternya load_image_to_edit_path.

Semoga jawaban saya bermanfaat.

* inti peretasan

sorich87
sumber
Yup, ini di-hardcode menjadi beberapa fungsi sisi admin yang berhubungan dengan gambar. Ada filter WP_MEMORY_LIMITkonstan dan bahkan admin_memory_limit, tetapi tidak ada yang berkonsultasi dalam beberapa kasus ini.
Annika Backstrom
1

Swill - Saya punya masalah yang sama. Sialan wordpress dengan beberapa "fitur" Pendekatan yang agak lebih canggih adalah mengubah semua @ini_set untuk mengaturnya dari WP_MEMORY_LIMIT - masalah terpecahkan

Juga, mengubah nilai php saat runtime tidak sepintar itu, tidak yakin mengapa itu diterapkan :(

Neosk
sumber
0

Menurut uraian Anda, saya pikir kode ini admin.phpadalah masalahnya:

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

Agak aneh bahwa itu memperlakukan penggunaan memori admin secara terpisah, tetapi setidaknya itu dapat disaring.

Jarang
sumber
Ini tidak berfungsi untuk operasi gambar di admin. Mereka dikurangi menjadi 256MB lagi terlepas apakah saya menggunakan filter itu atau tidak. : /
hakre
0

Saya hanya ingin mengucapkan terima kasih kepada bangbambang. Ini adalah posting pertama yang saya temukan yang dapat memberi saya wawasan mengapa entri ke wp-config.php define('WP_MEMORY_LIMIT', '512M');sebenarnya tidak digunakan. Saya menghabiskan berjam-jam mencoba untuk mencari tahu ini ...

Impor saya gagal dengan masalah kelelahan 256M terlepas dari bagaimana saya mengatur batas memori.

Berikut adalah tempat-tempat di mana batas memori hardcoded ke 256M (dalam versi 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)

sumber
Tiket # 13847 memiliki tambalan yang terpasang yang membuat tempat-tempat tersebut dapat dikonfigurasi dengan konstanta tambahan yang dipanggil WP_MAX_MEMORY_LIMIT.
hakre
-4
/* Memory Limit */
define( 'WP_MEMORY_LIMIT', '1G' );
define( 'WP_MAX_MEMORY_LIMIT', '1G');
Anton
sumber