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 类将无法使用。
非常实用!
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 类将无法使用。
新闻资讯 更多
- 【建站知识】查询nginx日志状态码大于400的请求并打印整行04-03
- 【建站知识】Python中的logger和handler到底是个什么?04-03
- 【建站知识】python3拉勾网爬虫之(您操作太频繁,请稍后访问)04-03
- 【建站知识】xpath 获取meta里的keywords及description的方法04-03
- 【建站知识】python向上取整以50为界04-03
- 【建站知识】scrapy xpath遇见乱码解决04-03
- 【建站知识】scrapy爬取后中文乱码,解决word转为html 时cp1252编码问题04-03
- 【建站知识】scrapy采集—爬取中文乱码,gb2312转为utf-804-03