Fatal error: Allowed memory size of 167772160 bytes exhausted (tried to allocat

Tác giả server360, T.Mười 02, 2012, 12:12:29 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Mã nguồn [Chọn]
Fatal error: Allowed memory size of 167772160 bytes exhausted (tried to allocate 81 bytes) in /home/nhvipssa/public_html/plugins/system/jvcounter/jvcounter.php on line 145Có nhiều nguyên nhân dẫn đến lỗi như trên, nhưng thông thương nhất là do bị giới bộ nhớ trong cấu hình PHP.
  • Với thông báo lỗi trên thì chúng ta có thể thấy rằng đoạn mã quá lớn nên cần tham số memory_limit lớn hơn 167772160. Vì vậy hãy tìm đến tập tin cấu hình của PHP php.ini và tăng nó lên khoảng 170MB.
  • Khi bạn thấy một lỗi "Fatal error: Allowed memory size of 167772160 bytes exhausted" trong trình duyệt hoặc trong nhật ký máy chủ, có nghĩa là PHP đã hết giới hạn bộ nhớ tối đa. Chủ yếu là do không đủ bộ nhớ phân bổ cho đoạn mã. Bài viết này sẽ mô tả làm thế nào để tăng giới hạn bộ nhớ.
1. Kiểm tra memory_limit.

Để xem có bao nhiêu bộ nhớ phân bổ cho bạn PHP, bạn cần tạo ra một tập tin trên máy chủ của bạn chẳng hạn như info.php và đặt đoạn mã sau đây:

Mã nguồn [Chọn]
<Php phpinfo ();?>
Truy cập vào nó trong trình duyệt của bạn, bạn sẽ thấy một bảng danh sách tất cả các cấu hình về môi trường PHP hiện tại. Tìm kiếm cho "memory_limit", bạn sẽ thấy:
2. Cần bao nhiêu bộ nhớ?

Phụ thuộc vào Core WordPress, 32MB là bộ nhớ mặc định giới hạn. Core Drupal6 là giới hạn bộ nhớ là 16MB, 32MB được đề xuất. Nhưng nếu bạn cài đặt nhiều Plugin, đặc biệt là các Plugin với hình ảnh, bạn có thể cần hơn 128MB hoặc nhiều bộ nhớ.

3. Tăng memory_limit.

Cách 1: Tăng memory_limit bằng cách thay đổi cấu hình của PHP trong tập tin cấu hình PHP php.ini.

Cách dễ dàng và phổ biến nhất là thay đổi thông số trong tập tin cấu hình của PHP php.ini.
  • Trước hết bạn cần tìm vị trí lưu tập tin cấu hình của PHP PHP.ini của bạn.
  • Bạn có thể sử dụng hàm phpinfo () và tìm đến phần Loaded để xem chính vị PHP lưu vị trí tập tin cấu hình nơi đây. Các bạn hãy xem như hình bên dưới.
  • Với người dùng Linux, bạn đơn giản chỉ cần chạy lệnh như sau để tìm thấy vị trí lưu tập tin cấu hình của PHP
Mã nguồn [Chọn]
$ php -i | grep 'Configuration File'Kết quả xuất ra:

Mã nguồn [Chọn]
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini
  • Sau khi đã tìm thấy vị trí lưu tập tin cấu hình của PHP php.ini thì các bạn hãy mở nó ra và tìm từ khóa "memory_limit" và sau đó thay đổi giá trị cho phù hợp với nhu cầu của bạn. Các bạn có thể xem ví dụ như sau:
Mã nguồn [Chọn]
memory_limit = 128M;
  • Lưu lại các thay đổi của tập tin cấu hình PHP php.ini và khởi động lại Apache để nhận cấu hình mới của PHP. Sử dụng lệnh sau đây để khởi động lại Apache.
Mã nguồn [Chọn]
httpsd restart
  • Đối với môi trường Web Shared Hosting thì các bạn sẽ không thể tự do thay đổi cấu hình của PHP thì các bạn có thể sử dụng cách là cấu hình trong tập tin .htaccess.
Cách 2: Tăng memory_limit bằng cách cấu hình tập tin .htaccess.
  • Tìm tập tin ".htaccess" trong thư mục gốc của tên miền trên Web Shared Hosting của bạn và thêm dòng sau đây:
Mã nguồn [Chọn]
php_value memory_limit 128M
Cách 3: Tăng memory_limit bằng cách cấu hình tập tin cấu hình của WordPress.
  • Trong tập tin cấu hình của WordPress wp-config.php của bạn, tìm hoặc thêm đoạn mã như sau:
Mã nguồn [Chọn]
define ('WP_MEMORY_LIMIT', '64M ');
Chú ý: Theo mặc định, WordPress sẽ cố gắng để tăng bộ nhớ phân bổ cho PHP đến 32MB trong tập tin cấu hình WordPress wp-settings.php, do đó trong tập tin cấu hình wp-config.php phải thiết lập cao hơn 32MB.

Cách 4: Tăng memory_limit bằng cách cấu hình tập tin cấu hình của Drupal.
  • Đối với các bạn sử dụng Drupal, các bạn có thể chỉnh sửa các trong default.settings.php. Các bạn hãy thêm vào đoạn mã như sau:
Mã nguồn [Chọn]
ini_set ('memory_limit', '128M ');
Cách 5: Tăng memory_limit đối với các mã nguồn khác.

  • Tương tự như Drupal, các bạn cũng có thể thêm vào đoạn mã như sau:
Mã nguồn [Chọn]
ini_set ('memory_limit', '128M ');
Nếu các bạn có ý kiến gì hay hơn thì đừng quên chia sẻ qua bình luận bên dưới.