วิธีการใช้หน่วยความจำมากกว่า 256MB ในผู้ดูแลระบบ?


10

ฉันกำลังสร้างเว็บไซต์สำหรับช่างภาพที่อัปโหลดรูปภาพที่มีขนาดใหญ่สำหรับกล้องดิจิทัลในปัจจุบัน รูปภาพค่อนข้างใช้หน่วยความจำค่อนข้างมากโดยเฉพาะการทำงานของภาพเช่นการสร้างภาพขนาดย่อ

ดังนั้นฉันจึงต้องการเพิ่มขีด จำกัด หน่วยความจำในผู้ดูแลระบบที่สูงกว่า 256MB - จะทำอย่างไรได้บ้าง? ฉันอนุญาตให้ CGI และ PHP ใช้งานได้มากถึง 1 กิกะไบต์ แต่ wordpress ลดหน่วยความจำลงเหลือ 256MB เสมอ ความคิดใด ๆ ที่จะแก้ไขปัญหานั้นในฝั่งไคลเอ็นต์ที่ต้องสามารถอัปเดตอัตโนมัติได้

UPDATE: จาก 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 - เฮ้! ฉันกำลังมองหาที่จะแก้ปัญหานี้ด้วย WordPress ถ้าฉันต้องการตั้งค่าเซิร์ฟเวอร์รูปย่อฉันจะไม่ใช้ wordpress อยู่ดี แต่ขอบคุณสำหรับลิงค์ที่น่าสนใจอย่างน้อย :)
hakre

คำตอบ:


13

ในทางทฤษฎีการแก้ไข config.php ของคุณและเพิ่มบรรทัดนี้ก่อนที่จะรวม wp-settings.php

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

ควรเพิ่มขีด จำกัด หน่วยความจำของคุณสำหรับ WordPress เป็น 256MB หรือค่าอะไรก็ตามที่คุณตั้งไว้ และสิ่งนี้จะใช้ได้ทั่วทั้งไซต์ อย่างไรก็ตามตามที่sorich87 ชี้ให้เห็นมีฟังก์ชั่นบางอย่างที่จะเปลี่ยนการตั้งค่านี้ด้วยขีด จำกัด ฮาร์ดโค้ด 256 MB

เพื่อแฮ็กหรือไม่แฮ็ก

ข้อกังวลเล็กน้อยเกี่ยวกับเรื่องนี้WP_MEMORY_LIMITคือหนึ่งในการตั้งค่า WP ที่แปลกที่สุดที่ฉันเคยพบ หากคุณตรวจสอบ/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 จะตั้งค่าให้เป็นการใช้หน่วยความจำเริ่มต้นต่ำมากจนกระทั่งฉันพบสิ่งนี้ใน WP codex:

WordPress จะตรวจสอบโดยอัตโนมัติว่า PHP ได้รับการจัดสรรหน่วยความจำน้อยกว่าค่าที่ป้อนก่อนที่จะใช้ฟังก์ชั่นนี้หรือไม่ ตัวอย่างเช่นถ้า PHP ได้รับการจัดสรร 64MB ไม่จำเป็นต้องตั้งค่านี้เป็น 64M เนื่องจาก WordPress จะใช้ 64 เมกะไบต์ทั้งหมดโดยอัตโนมัติหากจำเป็นต้องเป็น ( แหล่งที่มา )

คำอธิบายนั้นโล่งใจ อย่างไรก็ตามการใช้รหัสอย่างหนัก@ini_set('memory_limit', '256M');ทุก WP รันฟังก์ชั่นที่จำเป็นหน่วยความจำเพิ่มเติมจะไม่เคยเอ่ยถึง ในความเป็นจริงฉันไม่พบคำอธิบายเกี่ยวกับพฤติกรรมที่คลุมเครือนี้จาก WP codex เนื่องจากฟังก์ชั่นที่ไม่เกี่ยวข้องกับผู้ใช้ส่วนใหญ่จะไม่ได้รับการบันทึกไว้หรือไม่ได้อธิบายอย่างชัดเจนใน codex

ในขณะที่การตั้งค่านี้ทำงานได้ดีในกรณีส่วนใหญ่มันจะทำให้ฟังก์ชั่นเหล่านั้นไร้ประโยชน์บนเซิร์ฟเวอร์ที่มีการตั้งค่าหน่วยความจำสูงสุดต่ำหรือในกรณีของคุณการใช้หน่วยความจำที่สูงขึ้น

ฉันคิดว่าทางออกเดียวของคุณคือการปรับเปลี่ยนคอร์ คุณอาจพบโพสต์นี้เขียนโดย hakre น่าสนใจที่จะอ่าน เขายังส่งข้อเสนอแนะการแก้ไขใน Trac ลิงค์ก่อนหน้าไปยังไฟล์แก้ไขอาจช่วยให้คุณค้นหารายการฟังก์ชันที่ใช้การตั้งค่านี้

แก้ไข:

นี่เป็นคำตอบที่โง่ที่สุดที่ฉันเคยให้เพราะฉันให้ลิงค์ไปยังโพสต์ของคุณเอง (เพิ่งรู้ว่าชื่อ OP นั้นแย่มากหลังจาก 2 วัน): D

แก้ไข 2:

ตามที่ระบุไว้ในความคิดเห็นนี้ได้รับการแก้ไขโดยการเปิดตัว 3.2


คำตอบของคุณอยู่ไกลจากการเป็นคนโง่ เพื่อความแม่นยำมันช่างโง่เขลาที่ฉันโพสต์คำถามนี้ในขณะที่ฉันรู้คำตอบอยู่แล้วและความคิดเห็นของคุณก็แสดงให้เห็นว่าคุณวิ่งหนีไป จริงๆแล้วคำขอโทษที่ใหญ่ที่สุดของฉันการโพสต์ลิงค์ที่นี่ถูกต้องเท่าที่ฉันรู้ว่าตัวเองในขณะที่โพสต์คำถามดังนั้นสิ่งที่จะพูด? ขอบคุณที่เปิดใจยอมรับ! ฉันชอบสไตล์ของคุณและเชื่อมโยงบล็อกของฉันกับคำตอบของคุณ (ไม่เพียง แต่เชื่อมโยงกลับไปที่บล็อก)
hakre

ใน 3.2 ควรกำหนดค่านี้ได้: เซ็ตการแก้ไข 17749
hakre

1

มี@ini_set('memory_limit', '256M');ก่อนที่ภาพจะถูกโหลดในหน่วยความจำโดยฟังก์ชั่น GD

imagecreatefromstring()(บรรทัด 253, wp-include / media.php) ถูกwp_load_image()ใช้โดยimage_resize(ฟังก์ชั่นนี้ใช้ในการประมวลผลภาพเพื่อสร้างภาพขนาดย่อ) ขีด จำกัด หน่วยความจำอยู่ที่บรรทัด 252 ดังนั้นเท่าที่ฉันเห็นไม่มีวิธีแก้ไขโดยไม่ฆ่าลูกแมว *> :)

นอกจากนี้ยังมีฟังก์ชั่น GD ในload_image_to_edit()(บรรทัด 200, wp-admin / include / image-edit.php) โปรแกรมแก้ไขรูปภาพนี้ใช้งานแล้ว (ฉันไม่ได้ใช้เพราะฉันรู้ว่า WordPress ไม่เคยรู้มาก่อนว่าจะเจอมัน :)) หากลูกค้าของคุณใช้มันคุณอาจต้องการตั้งค่าขีด จำกัด หน่วยความจำที่นั่น มีตัวกรองload_image_to_edit_pathอยู่

หวังว่าคำตอบของฉันจะเป็นประโยชน์

* แฮ็คหลัก


ใช่สิ่งเหล่านี้จะถูก hardcoded เป็นฟังก์ชั่นด้านผู้ดูแลระบบบางส่วนที่เกี่ยวข้องกับภาพ มีWP_MEMORY_LIMITค่าคงที่และแม้กระทั่งadmin_memory_limitตัวกรอง แต่ไม่ได้รับการพิจารณาในกรณีเหล่านี้
Annika Backstrom

1

Swill - ฉันมีปัญหาเดียวกัน wordpress ประณามด้วย "คุณสมบัติ" บางอย่างแนวทางที่ค่อนข้างซับซ้อนกว่านี้คือการเปลี่ยน @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

ฉันแค่อยากจะบอกว่าต้องขอบคุณ bangbambang นี่เป็นโพสต์แรกที่ฉันพบว่าสามารถให้ข้อมูลเชิงลึกแก่ฉันเกี่ยวกับสาเหตุที่รายการใน 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ที่ทำให้สถานที่เหล่านั้นกำหนดค่าที่มีความสามารถอย่างต่อเนื่องเพิ่มเติมที่เรียกว่า
hakre

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.