Vấn đềBạn đang trong quá trình cài đặt một plugin quan trọng thì mọi thứ đột ngột dừng lại. Thay vì thông báo thành công, WordPress lại hiển thị một lỗi khó chịu: PCLZIP_ERR_MISSING_FILE (-4) : Missing archive file. Điều này xảy ra do WordPress mất dấu tệp ZIP mà nó vừa tải xuống. Nguyên nhân thường do máy chủ không biết nơi lưu trữ các tệp tạm thời hoặc một thư mục nào đó không cho phép WordPress ghi dữ liệu vào.
Các nguyên nhân gốc rễ phổ biến- WP_TEMP_DIR chưa được định nghĩa: WordPress đang đoán nơi lưu trữ tệp và nó đã đoán sai.- Phân quyền khắt khe: Thư mục wp-content/upgrade của bạn bị khóa chặt hơn mức phân quyền 755 hoặc 775 cho phép.- Thiếu PHP ZipArchive: Máy chủ của bạn đang sử dụng thư viện PclZip cũ và chậm hơn do tiện ích mở rộng ZipArchive hiện đại chưa được kích hoạt.- Hết dung lượng đĩa hoặc giới hạn Inode: Gói hosting của bạn đã chạm mức giới hạn 20GB, hoặc bạn đã dùng hết số lượng tệp tối đa (inodes) cho phép của tài khoản.## Các bước khắc phục cụ thể### 1. Định nghĩa thư mục tạm cho WordPressPhần lớn các trường hợp, bạn chỉ cần chỉ định cho WordPress một nơi làm việc cụ thể. Theo mặc định, nó cố gắng sử dụng thư mục /tmp chung của máy chủ. Nếu nhà cung cấp dịch vụ lưu trữ của bạn hạn chế quyền truy cập vào thư mục đó vì lý do bảo mật, quá trình sẽ thất bại.
Để khắc phục, hãy chỉnh sửa tệp wp-config.php của bạn:
- Truy cập các tệp tin trên trang web của bạn qua SFTP hoặc Trình quản lý tệp (File Manager) của hosting.- Mở tệp
wp-config.phptrong thư mục gốc.- Tìm dòng chữ:/* That's all, stop editing! Happy publishing. */.- Ngay phía trên dòng đó, hãy dán dòng sau:``` define('WP_TEMP_DIR', dirname(FILE) . '/wp-content/upgrade/');
Điều này yêu cầu WordPress sử dụng thư mục `upgrade` của chính trang web bạn thay vì không gian tạm thời dùng chung của máy chủ.
### 2. Tạo và bảo mật thư mục UpgradeViệc thiết lập thư mục trong mã nguồn là chưa đủ; thư mục đó phải thực sự tồn tại trên máy chủ của bạn. Nếu nó bị thiếu hoặc có sai "chủ sở hữu" (owner), WordPress vẫn sẽ báo lỗi (-4).
- Đi tới thư mục `wp-content` của bạn.- Kiểm tra thư mục có tên `upgrade`. Nếu không thấy, hãy tạo nó.- Nhấp chuột phải vào thư mục và đặt phân quyền thành `755`. Trên một số máy chủ khắt khe, bạn có thể cần đặt thành `775`.Đối với những người thành thạo dòng lệnh, hãy chạy ba lệnh sau để đảm bảo thư mục đã sẵn sàng và thuộc sở hữu của máy chủ web (thường là `www-data`):
mkdir -p wp-content/upgrade chmod 755 wp-content/upgrade chown -R www-data:www-data wp-content/upgrade
### 3. Kích hoạt tiện ích mở rộng PHP ZipArchiveWordPress hoạt động tốt nhất khi tiện ích mở rộng PHP `ZipArchive` được kích hoạt. Khi thiếu tiện ích này, WordPress sẽ chuyển sang sử dụng thư viện PclZip, vốn nhạy cảm hơn nhiều với các vấn đề về đường dẫn thư mục. Việc chuyển sang `ZipArchive` thường giúp lỗi biến mất ngay lập tức.
**Trên Ubuntu/Debian:**
sudo apt-get install php-zip sudo systemctl restart php8.2-fpm # Thay đổi cho phù hợp với phiên bản bạn đang dùng sudo systemctl restart nginx
**Trên cPanel:** Tìm mục **Select PHP Version**, nhấp vào **Extensions**, và đảm bảo ô **zip** đã được tích chọn. Nếu nó đã được chọn, hãy thử bỏ chọn và chọn lại để làm mới cấu hình.
### 4. Kiểm tra giới hạn máy chủNếu đĩa cứng của bạn đã đầy 99%, WordPress không thể hoàn tất việc ghi tệp ZIP. Nó sẽ tạo ra một tệp 0-byte, nhận ra dữ liệu bị thiếu và báo lỗi PCLZIP. Sử dụng lệnh sau để kiểm tra dung lượng của bạn:
df -h
Ngoài ra, hãy kiểm tra **Inodes** (tổng số lượng tệp được phép). Nếu bạn có hàng nghìn tệp phiên (session) cũ hoặc tệp nhật ký lỗi (error logs), bạn có thể vẫn còn dung lượng nhưng không còn "chỗ" cho các tệp mới. Sử dụng lệnh `df -i` để kiểm tra mức sử dụng inode của bạn.
## Cách xác minh kết quảSau khi áp dụng các thay đổi này, hãy quay lại bảng điều khiển của bạn. Thử cài đặt một plugin nhỏ như 'Classic Editor' hoặc 'Query Monitor'. Nếu quá trình cài đặt hoàn tất trong vài giây, bạn đã giải quyết xong vấn đề. Hãy kiểm tra nhanh bên trong thư mục `wp-content/upgrade`; nó nên để trống. WordPress là một "vị khách" lịch sự và sẽ xóa các tệp ZIP tạm thời sau khi cài đặt xong.
## Mẹo bảo trì chuyên nghiệp- **Dọn dẹp tắc nghẽn:** Nếu một bản cập nhật thất bại, nó có thể để lại các thư mục "rác" bên trong `wp-content/upgrade`. Hãy xóa chúng thủ công để tránh các xung đột trong tương lai.- **Kiểm tra open_basedir:** Nếu bạn đang dùng shared hosting và cách khắc phục trên không hiệu quả, hãy hỏi nhà cung cấp xem các hạn chế `open_basedir` có đang hoạt động không. Thiết lập này thường ngăn WordPress "nhìn thấy" các thư mục tạm mà nó cần.- **Plugin bảo mật:** Một số tính năng "thắt chặt bảo mật" trong các plugin bảo mật có thể chặn PHP ghi vào thư mục `wp-content`. Nếu bạn vẫn gặp lỗi, hãy thử tắt plugin bảo mật trong 5 phút để kiểm tra.

