PHP远程下载zip并解压覆盖指定目录

这个功能常用于更新程序之类的,应该不用我说了!

非常实用!

PHP实现代码:

// 远程 zip 文件的 URL
$zipUrl = 'https://example.com/install.zip';

// 目标文件路径
$targetPath = '/path/to/install';

// 下载 zip 文件
$zipData = file_get_contents($zipUrl);

if ($zipData === false) {
  die('Failed to download ZIP file.');
}

// 清空目录
function emptyDir($dir) {
  $files = array_diff(scandir($dir), array('.', '..'));
  foreach ($files as $file) {
    if (is_dir("$dir/$file")) {
      emptyDir("$dir/$file");
      rmdir("$dir/$file");
    } else {
      unlink("$dir/$file");
    }
  }
}

emptyDir($targetPath);

// 解压缩文件
$zip = new ZipArchive;
if ($zip->open('install.zip') === true) {
  $zip->extractTo($targetPath);
  $zip->close();
  echo 'Success!';
} else {
  echo 'Failed to unzip file.';
}

封装成函数:

function downloadAndExtract($installDir, $remoteZipUrl) {
    // 删除指定目录及其下所有文件
    if (is_dir($installDir)) {
        $files = glob($installDir . '/*');
        foreach ($files as $file) {
            if (is_file($file)) {
                unlink($file);
            } elseif (is_dir($file)) {
                $innerFiles = glob($file . '/*');
                foreach ($innerFiles as $innerFile) {
                    if (is_file($innerFile)) {
                        unlink($innerFile);
                    }
                }
                rmdir($file);
            }
        }
        rmdir($installDir);
    }

    // 创建指定目录
    if (!mkdir($installDir, 0777, true)) {
        throw new Exception('Failed to create install directory.');
    }

    // 下载远程 Zip 文件并保存到本地
    $tempZip = tempnam(sys_get_temp_dir(), 'download_');
    $fp = fopen($tempZip, 'w');
    $ch = curl_init($remoteZipUrl);
    curl_setopt($ch, CURLOPT_FILE, $fp);
    $success = curl_exec($ch);
    curl_close($ch);
    fclose($fp);
    if (!$success) {
        throw new Exception('Failed to download the remote ZIP file.');
    }

    // 解压缩文件到指定目录
    $zip = new ZipArchive();
    if ($zip->open($tempZip) === TRUE) {
        $zip->extractTo($installDir);
        $zip->close();
    } else {
        throw new Exception('Failed to extract the ZIP file.');
    }

    // 删除临时文件
    unlink($tempZip);
}

这个函数使用 PHP 内置的 ZipArchive 类来解压缩 ZIP 文件,并使用 glob 函数来列出 install 目录下的所有文件并删除它们。注意需要开启 PHP 的 Zip 扩展,否则 ZipArchive 类将无法使用。

© 版权声明
THE END
喜欢就支持一下吧
点赞5
评论 抢沙发

请登录后发表评论

    暂无评论内容