$zip = new ZipArchive;
if ($zip->open('file.zip') === true) {
$zip->extractTo('/target/dir/');
$zip->close();
echo '解壓完成';
} else {
echo '無法開啟 ZIP';
}
# 1. 安裝開發套件
sudo apt-get install php-dev libunrar-dev
# 2. PECL 安裝
sudo pecl install rar
# 3. 啟用擴充套件
echo "extension=rar.so" | sudo tee /etc/php/8.1/mods-available/rar.ini
sudo phpenmod rar
sudo systemctl restart php8.1-fpm
至 PECL 下載對應 PHP 版本、VC、TS/NTS 的 php_rar.dll,放入 ext 目錄,php.ini 加入 extension=php_rar.dll,重啟服務。
function extractRar($rarPath, $destDir) {
$rar = rar_open($rarPath) or die('無法開啟 RAR');
$list = rar_list($rar) or die('無法取得列表');
foreach ($list as $entry) {
// $entry 為 RarEntry 物件
$entry->extract($destDir);
}
rar_close($rar);
}
// 使用
extractRar('upload/archives/data.rar', 'upload/extracted/');
memory_limit。rar_open($path, $password) 第二參數傳入密碼。iconv('utf-8', 'gbk', $filename) 轉碼(視系統語系)。// Linux
exec('unzip -o file.zip -d /target/dir 2>&1', $out, $ret);
exec('unrar x file.rar /target/dir 2>&1', $out, $ret);
// 需確認伺服器安裝 unzip/unrar 且 PHP 未禁用 exec()
生產環境建議優先使用 PHP 擴充套件,避免指令注入風險。