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

时间:2023年10月04日

/

来源:网络

/

编辑:佚名

这个功能常用于更新程序之类的,应该不用我说了!
非常实用!
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 类将无法使用。
猜你需要

豫ICP备2021026617号-1  豫公网安备:41172602000185   Copyright © 2021-2028 www.78moban.com/ All Rights Reserved

本站作品均来自互联网,转载目的在于传递更多信息,并不代表本站赞同其观点和对其真实性负责。如有侵犯您的版权,请联系 1565229909#qq.com(把#改成@),我们将立即处理。