BizMaC bizmac.com

Cài đặt mcrypt cho PHP 7.2 trên DirectAdmin

Hướng dẫn DirectAdmin · cập nhật 23/08/2026

Để cài mcrypt cho PHP 7.2 trên DirectAdmin, bạn tải mã nguồn extension từ PECL, biên dịch bằng bộ công cụ của chính bản PHP 7.2 đang chạy, rồi khai báo nó trong file cấu hình riêng. Mất khoảng 5 phút, cần quyền root qua SSH.

Việc này chỉ cần khi bạn còn một mã nguồn cũ gọi các hàm mcrypt_encrypt, mcrypt_decrypt và website báo lỗi hàm không tồn tại sau khi nâng PHP lên 7.2.

  1. Tải mã nguồn extension từ kho PECL.
  2. Giải nén rồi chuẩn bị môi trường biên dịch bằng phpize của bản PHP 7.2.
  3. Biên dịch và cài đặt.
  4. Khai báo extension vào file cấu hình riêng rồi khởi động lại PHP-FPM.
  5. Kiểm tra extension đã nạp.
Nhóm phát triển PHP đánh dấu extension này là lỗi thời từ PHP 7.1 và gỡ khỏi lõi ở PHP 7.2, đẩy sang PECL. Thư viện nền libmcrypt phía dưới ngừng cập nhật từ năm 2007. Bài này giữ cho máy chủ cũ đang chạy mã nguồn chưa chuyển đổi được, không nên dùng cho dự án mới.

Vì sao PHP 7.2 không còn mcrypt sẵn trong lõi

Từ PHP 7.2, extension này bị gỡ khỏi mã nguồn PHP và chuyển sang kho PECL. Lý do là thư viện libmcrypt mà nó bọc bên ngoài đã ngừng phát triển từ 2007, không còn ai vá lỗi và không hỗ trợ các thuật toán mã hoá đời mới. PHP 7.1 chỉ cảnh báo lỗi thời, tới 7.2 thì gỡ hẳn.

Hệ quả là sau khi nâng PHP lên 7.2, mọi lời gọi hàm mcrypt trong mã nguồn đều ném lỗi Call to undefined function mcrypt_encrypt(). Website trắng trang hoặc trả về lỗi 500 tuỳ cấu hình hiển thị lỗi. Một lỗi build khác hay đi kèm khi nâng PHP trên máy chủ cũ nằm ở bài sửa lỗi libzip khi build PHP trên DirectAdmin.

Nên cài lại extension hay chuyển mã nguồn sang OpenSSL

Cài lại extension cho website chạy được ngay nhưng chỉ là cách hoãn. Chuyển mã nguồn sang OpenSSL hoặc Sodium mất công hơn nhưng dứt điểm, vì hai thư viện đó còn được cập nhật và có sẵn trong PHP. Bảng dưới đây để chọn theo tình huống đang gặp.

Tiêu chíCài lại qua PECLChuyển mã nguồn sang OpenSSL
Thời gianKhoảng 5 phútVài giờ tới vài ngày tuỳ mã nguồn
Cần sửa mã nguồnKhôngCó, phải viết lại phần mã hoá
Dữ liệu đã mã hoá cũĐọc lại được ngayPhải giải mã bằng thư viện cũ rồi mã hoá lại
Còn nhận bản vá bảo mậtKhông, libmcrypt ngừng từ 2007Có
Dùng được với PHP 8Không, extension không biên dịch nổiCó
Nên chọn khiWebsite đang chết, cần chạy lại gấpCó kế hoạch nâng PHP lên 8 trong năm nay

Cách cài mcrypt cho PHP 7.2 trên DirectAdmin

Năm bước dưới đây chạy bằng quyền root qua SSH. Điểm mấu chốt là mọi lệnh đều gọi công cụ nằm trong /usr/local/php72, không gọi pecl hay phpize chung của hệ thống. Gọi nhầm thì extension biên dịch ra cho bản PHP khác và PHP 7.2 không nạp được.

1. Xoá mã nguồn còn sót của lần trước

cd /usr/local/src
rm -rf mcrypt-*

Bước này tránh việc phpize gặp file cấu hình cũ của lần biên dịch trước rồi báo lỗi lạ.

2. Tải mã nguồn từ PECL

/usr/local/php72/bin/pecl channel-update pecl.php.net
/usr/local/php72/bin/pecl download mcrypt || /usr/local/php72/bin/pecl download channel://pecl.php.net/mcrypt-1.0.1

Lệnh đầu làm mới danh mục gói. Lệnh sau tải bản mới nhất, hỏng thì tự chuyển sang tải thẳng bản 1.0.1 nhờ dấu hai gạch đứng. Bản 1.0.1 là bản ổn định cho nhánh PHP 7.2.

3. Giải nén và biên dịch

tar -zxvf mcrypt-*.tgz && cd mcrypt-*/
/usr/local/php72/bin/phpize
./configure --with-php-config=/usr/local/php72/bin/php-config
make && make install

Tham số --with-php-config là chỗ dễ sai nhất. Nó chỉ cho trình biên dịch biết lấy thông tin của bản PHP 7.2 chứ không phải bản PHP mặc định của máy. Máy chủ DirectAdmin thường cài song song nhiều bản PHP nên phải khai rõ đường dẫn.

4. Khai báo extension

echo "extension=mcrypt.so" >> /usr/local/php72/lib/php.conf.d/90-custom.ini

Ghi vào file 90-custom.ini chứ không sửa thẳng php.ini. CustomBuild ghi đè php.ini mỗi lần build lại PHP, còn thư mục php.conf.d thì nó giữ nguyên. Sau đó khởi động lại PHP-FPM và web server để cấu hình có hiệu lực.

5. Kiểm tra extension đã nạp

/usr/local/php72/bin/php -i | grep ^mcrypt

Kết quả đúng có dạng:

mcrypt
mcrypt support => enabled
mcrypt_filter support => enabled
mcrypt.algorithms_dir => no value => no value
mcrypt.modes_dir => no value => no value

Dòng mcrypt support => enabled là dấu hiệu extension đã nạp thành công. Mở lại website để chắc nó hết báo lỗi hàm không tồn tại.

Xử lý các lỗi thường gặp khi biên dịch

Bốn tình huống dưới đây chiếm phần lớn ca thất bại. Mỗi tình huống có thông báo riêng nên nhìn dòng lỗi là biết rơi vào ca nào.

Báo mcrypt.h not found. Máy thiếu thư viện nền và phần header của nó. Cài bằng yum install libmcrypt libmcrypt-devel trên CentOS hoặc apt install libmcrypt-dev trên Ubuntu, rồi chạy lại từ bước 3. Kho chính thức CentOS 7 không có gói này, phải bật kho EPEL trước.

Báo phpize: command not found. Đường dẫn PHP 7.2 trên máy không phải /usr/local/php72. Chạy ls /usr/local/ | grep php để xem tên thư mục thật rồi thay vào cả năm bước.

Biên dịch xong nhưng php -i không thấy dòng nào. File .ini ghi sai chỗ hoặc chưa khởi động lại PHP-FPM. Chạy /usr/local/php72/bin/php --ini để xem PHP thật sự đang đọc những file nào, đối chiếu với đường dẫn vừa ghi.

Mất extension sau khi build lại PHP. CustomBuild dựng lại PHP từ đầu và không giữ extension cài tay. Chạy lại toàn bộ năm bước sau mỗi lần build PHP. Các extension có sẵn thì bật nhanh hơn qua giao diện, xem bài bật tắt extension PHP trên DirectAdmin.

Chuyển mã nguồn khỏi thư viện cũ trước khi lên PHP 8

Extension này không biên dịch được trên PHP 8, nên mọi website còn gọi các hàm này sẽ chặn đường nâng cấp. PHP 7.2 hết hỗ trợ bảo mật từ 30/11/2020, tức máy chủ đang chạy bản này đã hơn năm năm không nhận bản vá cho lõi PHP.

Hướng thay thế là openssl_encrypt và openssl_decrypt cho mã hoá đối xứng, hoặc bộ hàm Sodium có sẵn từ PHP 7.2 cho dự án viết mới. Điểm cần chú ý khi chuyển: thư viện cũ đệm dữ liệu bằng byte rỗng còn OpenSSL đệm theo chuẩn PKCS7, nên dữ liệu đã mã hoá phải giải mã bằng chính nó rồi mã hoá lại bằng thư viện mới, không đọc chéo được. Làm việc đó trước khi gỡ extension, không thì mất dữ liệu cũ.

Hướng dẫn này có giúp được Anh/Chị không?

Bài khác trong DirectAdmin

Xem cả 31 bài
Bật tắt extension PHP trên DirectAdmin Vào Extra Features rồi Select PHP version để tích hoặc bỏ tích extension. Nên bật thư viện nào cho WordPress, cách xác nhận đã nạp và lỗi hay gặp. 7 phút đọc 277 lượt xem Cập nhật 28/08/2026 Khôi phục website trên DirectAdmin từ bản sao lưu Đưa tệp sao lưu lên hosting, chọn đúng phần dữ liệu cần đưa về và kiểm website sau khi khôi phục, kèm cách chọn bản nào khi có nhiều bản. 8 phút đọc 297 lượt xem Cập nhật 26/08/2026 Khắc phục lỗi License has expired DirectAdmin DirectAdmin báo License has expired khi bản quyền hết hạn hoặc máy chủ đổi IP. Cách chạy getLicense.sh để tải lại license và mở khoá bảng điều khiển. 6 phút đọc 365 lượt xem Cập nhật 26/08/2026 Xoá tin nhắn hệ thống trên DirectAdmin Dọn hộp tin nhắn hệ thống DirectAdmin bằng giao diện hoặc dòng lệnh, kèm bảng phân loại tin nào đáng đọc trước khi xoá và cách giảm tin sinh ra. 8 phút đọc 188 lượt xem Cập nhật 26/08/2026 Cài SSL Let's Encrypt miễn phí trên DirectAdmin Let's Encrypt cấp chứng chỉ SSL miễn phí, hạn 90 ngày và tự gia hạn. Cách bật trong DirectAdmin và xử lý lỗi khi xin chứng chỉ. 5 phút đọc 171 lượt xem Cập nhật 23/08/2026 Sao lưu website trên DirectAdmin bằng Create Backup Tạo bản sao lưu mã nguồn, cơ sở dữ liệu và hộp thư trên DirectAdmin, tải tệp nén về máy rồi kiểm bên trong có đủ dữ liệu để dựng lại website. 8 phút đọc 178 lượt xem Cập nhật 21/08/2026