Làm cách nào để sử dụng hơn 256 MB bộ nhớ trong quản trị viên?


10

Tôi đang xây dựng một trang web cho một nhiếp ảnh gia tải lên những bức ảnh thường lớn cho máy ảnh kỹ thuật số ngày nay. Hình ảnh khá tốn bộ nhớ, đặc biệt là các thao tác hình ảnh như tạo hình thu nhỏ.

Vì vậy, tôi muốn tăng giới hạn bộ nhớ trong quản trị viên lên trên 256 MB - làm thế nào để thực hiện điều này? Tôi đã cho phép CGI và PHP sử dụng tối đa 1 Gigabyte nhưng wordpress luôn giảm bộ nhớ xuống 256MB. Bất kỳ ý tưởng làm thế nào để khắc phục điều đó ở phía khách hàng cần có khả năng tự động cập nhật?

CẬP NHẬT: Từ Wordpress 3.2 đang diễn ra, giới hạn bộ nhớ tối đa trong Wordpress sẽ được cấu hình lại .


này, đã lâu không gặp bạn Đoán bạn đã bận rộn với khách hàng; tốt cho bạn! Bạn đã xem xét có thể giảm tải xử lý hình ảnh, có thể sử dụng Amazon S3 và EC2? aws.amazon.com/articles/1602 Hoặc Google App Engine? code.google.com/appengine/docs/python/images/USEimages.html Hoặc sử dụng urlimg.com ?
MikeSchinkel

@MikeSchnikel - Hej! Tôi đang tìm cách giải quyết vấn đề này với wordpress. Nếu tôi cần thiết lập một máy chủ hình thu nhỏ thì tôi sẽ không sử dụng wordpress. Nhưng cảm ơn vì các liên kết, ít nhất rất thú vị :).
hakre

Câu trả lời:


13

Về mặt lý thuyết, chỉnh sửa config.php của bạn và thêm dòng này trước khi đưa vào wp-settings.php.

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

nên tăng giới hạn bộ nhớ của bạn cho WordPress lên 256MB hoặc bất kỳ giá trị nào bạn đặt. Và điều này sẽ làm việc sitewide. Tuy nhiên, như sorich87 đã chỉ ra , có rất ít chức năng sẽ thay đổi cài đặt này với giới hạn 256 MB được mã hóa cứng.

Hack hay không hack

Một chút lo lắng về điều này, WP_MEMORY_LIMITlà một trong những cài đặt WP kỳ lạ nhất mà tôi gặp phải. nếu bạn kiểm tra /wp-includes/default-constants.phpbạn sẽ tìm thấy cài đặt này:

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

Tôi không bao giờ nhận ra rằng WP sẽ đặt mức sử dụng bộ nhớ mặc định của nó quá thấp, cho đến khi tôi tìm thấy điều này trong WP codex:

WordPress sẽ tự động kiểm tra xem PHP có được phân bổ ít bộ nhớ hơn giá trị đã nhập hay không trước khi sử dụng chức năng này. Ví dụ: nếu PHP đã được phân bổ 64 MB, thì không cần đặt giá trị này thành 64M vì WordPress sẽ tự động sử dụng tất cả 64 MB nếu cần. ( Nguồn )

Đó là lời giải thích. Tuy nhiên, việc sử dụng @ini_set('memory_limit', '256M');chức năng thực thi WP được mã hóa cứng mỗi khi cần thêm bộ nhớ không bao giờ được đề cập . Trên thực tế, tôi không tìm thấy lời giải thích nào về hành vi mơ hồ này từ WP codex. Vì hầu hết các chức năng không liên quan đến người dùng đều không được ghi lại hoặc không được giải thích rõ ràng trong codex.

Mặc dù cài đặt này hoạt động tốt trên hầu hết các trường hợp, nhưng nó sẽ làm cho các chức năng đó trở nên vô dụng trên máy chủ với cài đặt bộ nhớ tối đa thấp hơn hoặc trong trường hợp của bạn, sử dụng bộ nhớ cao hơn.

Cho đến khi những người WP sửa lỗi này, tôi nghĩ giải pháp duy nhất của bạn là sửa đổi cốt lõi. Bạn có thể thấy bài viết này được viết bởi hakre thú vị để đọc. Ông cũng gửi một đề nghị vá trong Trac. Liên kết trước để vá tệp có thể giúp bạn tìm danh sách chức năng sử dụng cài đặt này.

biên tập:

Đây là câu trả lời ngu ngốc nhất mà tôi từng đưa ra bởi vì tôi đưa ra một liên kết đến bài đăng của riêng bạn (chỉ cần nhận ra rằng tên OP đã được hakre sau 2 ngày): D

chỉnh sửa 2:

như đã đề cập trên bình luận, điều này đã được sửa bởi bản phát hành 3.2


câu trả lời của bạn là xa ngu ngốc. Nói chính xác thì thật là ngu ngốc khi tôi đăng câu hỏi này trong khi tôi đã biết câu trả lời, và nhận xét của bạn hoàn toàn cho thấy rằng bạn thực sự chạy qua đó. Thực sự, lời xin lỗi lớn nhất của tôi, đăng liên kết ở đây là rất đúng theo như tôi biết trong khi đăng câu hỏi, vậy phải nói gì? Cảm ơn vì đã mở để thừa nhận điều đó! Tôi thích phong cách của bạn và liên kết blog của tôi với câu trả lời của bạn (không chỉ liên kết trở lại blog).
hakre

Trong phiên bản 3.2 này phải có cấu hình:
Thay đổi

1

@ini_set('memory_limit', '256M');trước khi hình ảnh được tải trong bộ nhớ bởi các chức năng GD.

imagecreatefromstring()(dòng 253, wp-gộp / media.php) được sử wp_load_image()dụng bởi image_resize(chức năng này là xử lý hình ảnh được thực hiện để tạo hình thu nhỏ). Giới hạn bộ nhớ nằm ở dòng 252, vì vậy, theo như tôi có thể thấy, không có cách nào để sửa đổi nó mà không giết chết một con mèo con *> :).

Ngoài ra còn có các hàm GD trong load_image_to_edit()(dòng 200, wp-admin / gồm / image-edit.php). Cái này được sử dụng bởi trình chỉnh sửa hình ảnh (tôi chưa sử dụng nó, vì tôi biết WordPress, thậm chí còn không biết là tìm thấy nó :)). Nếu khách hàng của bạn sử dụng nó, bạn cũng có thể muốn đặt giới hạn bộ nhớ ở đó. Có bộ lọc load_image_to_edit_path.

Hy vọng câu trả lời của tôi là hữu ích.

* hack lõi


Phải, chúng được mã hóa thành một vài chức năng phía quản trị viên liên quan đến hình ảnh. Có một WP_MEMORY_LIMIThằng số và thậm chí là một admin_memory_limitbộ lọc, nhưng không được hỏi ý kiến ​​trong các trường hợp này.
Annika Backstrom

1

Swill - Tôi đã có vấn đề tương tự. Wordpress chết tiệt với một số "tính năng" Một cách tiếp cận khá phức tạp hơn là thay đổi tất cả các @ini_set để đặt nó từ WP_MEMORY_LIMIT - đã giải quyết vấn đề

Ngoài ra, việc thay đổi giá trị php trong thời gian chạy không phải là thông minh, không biết tại sao nó được triển khai :(


0

Theo mô tả của bạn, tôi nghĩ rằng mã admin.phpnày là vấn đề:

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

Hơi lạ là nó xử lý riêng việc sử dụng bộ nhớ quản trị viên, nhưng ít nhất nó có thể lọc được.


Điều này không hoạt động cho các hoạt động hình ảnh trong quản trị viên. Chúng được giảm xuống 256MB một lần nữa bất kể tôi có sử dụng bộ lọc đó hay không. : /
hakre

0

Tôi chỉ muốn nói cảm ơn bangbambang. Đây là bài đăng đầu tiên tôi tìm thấy có thể cung cấp cho tôi cái nhìn sâu sắc về lý do tại sao mục nhập vào wp-config.php define('WP_MEMORY_LIMIT', '512M');không thực sự được sử dụng. Tôi đã dành hàng giờ cố gắng để tìm ra điều này ...

Quá trình nhập của tôi không thành công với sự cố hết 256M bất kể tôi đặt giới hạn bộ nhớ như thế nào.

Dưới đây là những nơi giới hạn bộ nhớ được mã hóa cứng thành 256M (dù sao trong phiên bản 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)

Vé số 13847một bản vá được đính kèm giúp những nơi đó có thể định cấu hình với một hằng số bổ sung được gọi WP_MAX_MEMORY_LIMIT.
hakre

-4
/* Memory Limit */
define( 'WP_MEMORY_LIMIT', '1G' );
define( 'WP_MAX_MEMORY_LIMIT', '1G');
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.