Sửa lỗi libzip khi build PHP trên DirectAdmin
Hướng dẫn DirectAdmin · cập nhật 14/08/2026
Để sửa lỗi libzip khi build PHP trên DirectAdmin, bạn gỡ libzip 0.10.1 của CentOS 7, cài bản 0.11 trở lên, rồi chạy lại ./build php n. Toàn bộ mất khoảng 30 phút, phần lớn là thời gian chờ build.
Lỗi xuất hiện khi nâng PHP lên 7.3 hoặc cao hơn. CustomBuild dừng ở bước cấu hình và in ra:
configure: error: Package requirements (libzip >= 0.11 libzip != 1.3.1 libzip != 1.7.0) were not met
Requested 'libzip >= 0.11' but version of libzip is 0.10.1
- Xác nhận máy đang chạy libzip bản nào.
- Gỡ libzip cũ, cài bản mới bằng gói RPM hoặc biên dịch từ nguồn.
- Chạy lại lệnh build PHP.
- Kiểm tra PHP và extension zip đã hoạt động.
Đã kiểm trên CentOS 7 với DirectAdmin CustomBuild 2.0. CentOS 7 hết hỗ trợ từ 30/06/2024, bài giữ cho máy chủ cũ còn đang chạy.
Vì sao PHP 7.3 trở lên đòi libzip mới hơn
Từ PHP 7.3, extension zip không còn mang bản thư viện riêng bên trong mã nguồn PHP nữa mà dùng thư viện cài sẵn trên hệ thống. Bản tối thiểu là 0.11 vì extension cần các hàm mà bản 0.10 chưa có. CentOS 7 phát hành năm 2014 và kho gói chính thức giữ nguyên bản 0.10.1 suốt vòng đời, nên máy chủ CentOS 7 gặp lỗi này còn Ubuntu hay AlmaLinux đời mới thì không.
Hai bản 1.3.1 và 1.7.0 bị loại trừ ngay trong thông báo lỗi vì chúng có lỗi đã biết, PHP chủ động không nhận.
Nên cài libzip bằng gói RPM hay biên dịch từ nguồn
Hai cách cho kết quả như nhau. Gói RPM nhanh hơn vì không phải biên dịch, nhưng phụ thuộc kho bên thứ ba. Biên dịch từ nguồn mất thêm vài phút nhưng lấy file thẳng từ trang chủ nên luôn tải được. Chọn RPM trước, hỏng thì chuyển sang biên dịch.
| Tiêu chí | Gói RPM dựng sẵn | Biên dịch từ nguồn |
|---|---|---|
| Thời gian | Dưới 1 phút | 3 tới 5 phút |
| Nguồn tải | packages.psychotic.ninja (bên thứ ba) | libzip.org (trang chủ) |
| Rủi ro | Kho có lúc không truy cập được | Cần gói biên dịch trên máy |
| Nên dùng khi | Máy chủ vào được kho RPM | Kho RPM lỗi hoặc muốn dùng nguồn chính thức |
Cách sửa lỗi libzip khi build PHP trên DirectAdmin
Bốn bước dưới đây chạy trực tiếp trên máy chủ qua SSH. Bạn cần quyền root và một khung giờ ít truy cập, vì build PHP mất 10 tới 20 phút và website trên máy sẽ gián đoạn trong lúc đó.
1. Xác nhận bản đang cài
Đăng nhập SSH rồi chạy:
rpm -qa | grep libzip
Kết quả trả về libzip-0.10.1 nghĩa là đúng nguyên nhân nêu trên. Nếu ra bản 0.11 trở lên mà build vẫn lỗi, xem phần xử lý sự cố ở cuối bài.
2. Gỡ bản cũ và cài bản mới
Cách 1, cài từ gói RPM dựng sẵn:
yum remove libzip libzip-devel -y
rpm -ihf http://packages.psychotic.ninja/7/plus/x86_64/RPMS//libzip-0.11.2-6.el7.psychotic.x86_64.rpm
rpm -ihf http://packages.psychotic.ninja/7/plus/x86_64/RPMS//libzip-devel-0.11.2-6.el7.psychotic.x86_64.rpm
Yum liệt kê các gói phụ thuộc trước khi gỡ. Đọc danh sách đó và ghi lại, vì có thể phải cài lại sau khi build xong.
Cách 2, biên dịch từ mã nguồn:
yum remove libzip libzip-devel -y
wget https://libzip.org/download/libzip-0.11.tar.gz
tar -xzvf libzip-0.11.tar.gz
cd libzip-0.11
./configure
make
sudo make install
3. Build lại PHP
cd /usr/local/directadmin/custombuild
./build php n
Lệnh chạy 10 tới 20 phút tuỳ cấu hình máy. Đừng đóng phiên SSH giữa chừng. Nếu đường truyền hay rớt, chạy trong screen hoặc tmux để tiến trình không dừng theo.
4. Kiểm tra kết quả
rpm -qa | grep libzip
php -v
php -m | grep zip
Xong đúng khi libzip từ 0.11 trở lên, php -v in ra phiên bản không kèm dòng lỗi nào, và php -m có dòng zip. Mở thử một website trên máy để chắc nó còn chạy bình thường.
Xử lý các lỗi thường gặp khi build PHP
Bốn tình huống dưới đây chiếm phần lớn các ca build thất bại sau khi thay thư viện. Mỗi tình huống có dấu hiệu riêng nên nhìn thông báo là biết rơi vào ca nào.
Vẫn báo lỗi cũ dù đã cài bản mới. CustomBuild giữ lại kết quả cấu hình của lần chạy trước. Xoá bộ nhớ đệm rồi build lại:
cd /usr/local/directadmin/custombuild
./build clean
./build php n
Yum đòi gỡ thêm nhiều gói khác. Đó là các gói phụ thuộc. Ghi lại tên trước khi xác nhận, cài lại bằng yum install sau khi build xong.
Không tải được gói RPM. Kho packages.psychotic.ninja thuộc bên thứ ba nên có lúc không truy cập được. Chuyển sang cách 2, biên dịch từ nguồn.
Website trả lỗi 500 sau khi build. Một extension PHP cũ không tương thích với bản vừa build. Xem /var/log/httpd/error_log để biết extension nào đang lỗi, tắt nó trong php.ini rồi khởi động lại web server.
Câu hỏi thường gặp
Build PHP có làm mất dữ liệu website không?
Không. Lệnh build chỉ dựng lại phần mềm PHP, không đụng tới file website hay cơ sở dữ liệu. Nhưng website sẽ không truy cập được trong 10 tới 20 phút build, nên chọn khung giờ ít khách.
Gỡ libzip có ảnh hưởng dịch vụ nào đang chạy không?
Có thể. Lệnh gỡ kéo theo mọi gói phụ thuộc vào nó, thường là các công cụ nén file. Đọc danh sách yum liệt kê trước khi xác nhận, ghi lại rồi cài lại sau.
Máy chủ AlmaLinux hay Ubuntu có gặp lỗi này không?
Không. AlmaLinux 8 trở lên và Ubuntu 20.04 trở lên đều có bản 1.5 trở lên trong kho chính thức, vượt xa mức PHP đòi. Lỗi này chỉ xảy ra trên CentOS 7 vì kho gói của nó đứng yên từ 2014.
Có cách nào tránh mà không phải gỡ thư viện không?
Có, nếu bạn chấp nhận build PHP không kèm extension zip. Sửa file /usr/local/directadmin/custombuild/custom/php/configure.php để bỏ tuỳ chọn zip. Nhưng nhiều mã nguồn website cần extension này, nên cách đó chỉ hợp khi bạn chắc chắn không dùng tới.
Việc nên làm tiếp sau khi build xong
CentOS 7 đã hết hỗ trợ từ 30/06/2024, tức không còn bản vá bảo mật. Lỗi này là dấu hiệu của việc kho gói đứng yên trong khi phần mềm phía trên tiếp tục đi tới, và sẽ còn những lỗi tương tự với thư viện khác.
Nếu máy chủ còn chạy dịch vụ thật, nên tính đường chuyển sang AlmaLinux 9 hoặc Ubuntu 22.04. Cả hai đều có thư viện đời mới trong kho chính thức và còn nhận bản vá trong nhiều năm nữa. Kỹ thuật BizMaC hỗ trợ chuyển dữ liệu khi bạn gửi yêu cầu từ tài khoản đang dùng dịch vụ.
Bài khác trong DirectAdmin
Xem cả 31 bàiLàm theo vẫn chưa được?
Gửi yêu cầu hỗ trợ, kỹ thuật xem trực tiếp trên dịch vụ của Anh/Chị.