红穆笔记
首页 语言笔记 PHP 获取远程的.sql.zip文件,然后清空数据,再将.sql.zip导入mysql数据库
语言笔记 PHP PHP与mysql

PHP 获取远程的.sql.zip文件,然后清空数据,再将.sql.zip导入mysql数据库

PHP 获取远程的.sql.zip文件,然后清空数据,再将.sql.zip导入mysql数据库

可以使用PHP的mysqli扩展操作MySQL数据库。以下是获取远程的.sql.zip文件,然后清空数据库,再将.sql.zip导入mysql数据库的示例代码:

<?php
// 设置MySQL数据库连接信息
$host = 'localhost';
$dbname = 'my_database';
$user = 'my_username';
$password = 'my_password';

// 连接MySQL数据库
$mysqli = new mysqli($host, $user, $password, $dbname);

// 检查连接是否成功
if ($mysqli->connect_errno) {
    die('连接MySQL数据库失败:' . $mysqli->connect_error);
}

// 获取远程的.sql.zip文件并保存到本地
$remoteFileUrl = 'http://example.com/remote_sql.zip';
$localZipFilePath = tempnam(sys_get_temp_dir(), 'download_');
copy($remoteFileUrl, $localZipFilePath);

// 解压缩.sql文件
$zip = new ZipArchive;
$res = $zip->open($localZipFilePath);
if ($res === TRUE) {
    $zip->extractTo(sys_get_temp_dir());
    $zip->close();

    // 获取.sql文件名
    $sqlFilename = '';
    $sqlFiles = scandir(sys_get_temp_dir());
    foreach ($sqlFiles as $filename) {
        if (pathinfo($filename, PATHINFO_EXTENSION) == 'sql') {
            $sqlFilename = $filename;
            break;
        }
    }

    // 清空数据库
    $tables = array();
    $result = $mysqli->query('SHOW TABLES');
    while ($row = $result->fetch_array(MYSQLI_NUM)) {
        $tables[] = $row[0];
    }
    $result->close();
    foreach ($tables as $table) {
        $mysqli->query("DROP TABLE IF EXISTS $table");
    }

    // 导入.sql文件
    $sqlFile = file_get_contents(sys_get_temp_dir() . '/' . $sqlFilename);
    $mysqli->multi_query($sqlFile);

    // 删除临时文件
    unlink($localZipFilePath);
    unlink(sys_get_temp_dir() . '/' . $sqlFilename);
} else {
    die('解压缩文件失败');
}

// 关闭MySQL连接
$mysqli->close();
?>

上面的代码首先连接MySQL数据库,然后使用copy函数获取远程的.zip文件并保存到本地临时目录中。

接着使用ZipArchive类解压缩.zip文件,获取.sql文件名,并清空数据库。

最后使用mysqli扩展中的multi_query函数将.sql文件导入MySQL数据库中,最后删除临时文件。

封装成函数

🔒 隐藏内容:会员可查看

/**
 * 下载远程的 SQL ZIP 文件,清空数据库,导入 SQL 数据
 * @param string $remoteUrl 远程 SQL ZIP 文件地址
 * @param string $dbHost 数据库主机地址
 * @param string $dbName 数据库名称
 * @param string $dbUser 数据库用户名
 * @param string $dbPassword 数据库密码
 * @throws Exception 下载、解压或导入 SQL 文件失败时抛出异常
 */
function importSqlZip($remoteUrl, $dbHost, $dbName, $dbUser, $dbPassword)
{
    // 下载远程 SQL ZIP 文件并保存到本地
    $tempZip = tempnam(sys_get_temp_dir(), 'download_');
    $fp = fopen($tempZip, 'w');
    $ch = curl_init($remoteUrl);
    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 SQL ZIP file.');
    }

    // 解压 SQL ZIP 文件并获取 SQL 文件
    $zip = new ZipArchive();
    if ($zip->open($tempZip) === TRUE) {
        $sqlFile = $zip->getNameIndex(0);
        $zip->extractTo(sys_get_temp_dir());
        $zip->close();
    } else {
        throw new Exception('Failed to extract the SQL ZIP file.');
    }

    // 清空数据库
    $dsn = "mysql:host=$dbHost;dbname=$dbName";
    $pdo = new PDO($dsn, $dbUser, $dbPassword);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $pdo->exec("SET FOREIGN_KEY_CHECKS = 0");
    $tables = $pdo->query("SHOW TABLES")->fetchAll(PDO::FETCH_COLUMN);
    foreach ($tables as $table) {
        $pdo->exec("DROP TABLE IF EXISTS `$table`");
    }
    $pdo->exec("SET FOREIGN_KEY_CHECKS = 1");

    // 导入 SQL 数据
    $pdo->exec(file_get_contents(sys_get_temp_dir() . '/' . $sqlFile));

    // 删除临时文件
    unlink($tempZip);
    unlink(sys_get_temp_dir() . '/' . $sqlFile);
}

使用方法如下:

try {
    importSqlZip('http://example.com/backup.sql.zip', 'localhost', 'mydatabase', 'myusername', 'mypassword');
    echo 'Import success!';
} catch (Exception $e) {
    echo 'Error: ' . $e->getMessage();
}

 

 
微信赞赏

微信

支付宝赞赏

支付宝

✍️ 作者: 红穆

网站管理员 · 感谢阅读,更多精彩内容敬请关注

作者主页 查看主页 →

相关文章

PHP强制转换类型

PHP强制转换类型 语言笔记 PHP PHP采集 PHP与mysql

获取数据类型1.如果想查看某个表达式的值和类型,用var_dump()。 2.如果只是想得到一个易读懂的类型的表达方式用于调试,用 gettype()。3.要查看某个类型,不要用 gettype(),而用is_type() 函数。字符串转换为数值当一个字符串被当作数字来求值时,根据以下规则来决定结果…
👁 232
php 特殊字符转义与还原

php 特殊字符转义与还原 语言笔记 PHP PHP采集 PHP与mysql

转义字符是一种特殊的字符常量。转义字符以反斜线"&quot;开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。转义字符的用处1:将普通字符转为特殊用途,如后退键,回车键等。2:用来将特殊意义的字符转换回它原来的意义。3:在数据写入数据库前,都会使用转义字符(函…
👁 180
PHP mysqli

PHP mysqli 语言笔记 PHP PHP采集 PHP与mysql

执行针对数据库的查询:删除数据库&lt;?php // 假定数据库用户名:root,密码:123456,数据库:RUNOOB $con=mysqli_connect(&quot;localhost&quot;,&quot;root&quot;,&quot;123456&quot;,&quot;RUN…
👁 232
PHP中mysqli

PHP中mysqli 语言笔记 PHP PHP采集 PHP与mysql

mysqli_num_rows()这个函数只用于SELECT查询方法而mysqli_affected_rows()函数是记录上一个sql语句对整个数据库的影响从而把受影响的数据个数返回,这个主要用于INSERT(插入)、UPDATE(替换)、DELETE(删除)。
👁 145

推荐阅读

安防监控类网站模板 1035

安防监控类网站模板 1035 实用收藏 易优模板

此套eyoucms模板适用于安防监控类行业,设计风格科技安全,能够展示监控设备、安防系统、解决方案及工程案例。有助于安防科技企业在线上展示产品,吸引商业与政府客户。模板展示 安装说明 网站后台:/login.php 账号:admin 密码:admin 相关文章易优CMS安装常见问题总结易优CMS(E…
👁 48
易优CMS(EyouCms)系统安装教程

易优CMS(EyouCms)系统安装教程 程序笔记 易优cms

一、系统概述易优内容管理系统(EyouCms)是一款基于PHP+MySQL架构开发的企业级开源建站系统,采用ThinkPHP 5.0作为底层框架。二、环境要求在安装EyouCms之前,请确保服务器环境满足以下要求:项目要求操作系统Linux / Unix / WindowsWeb服务器Nginx /…
👁 58
(自适应手机端)APP应用软件下载站pbootcms模板 HTML5响应式手机软件下载网站源码 0183

(自适应手机端)APP应用软件下载站pbootcms模板 HTML5响应式手机软件下载网站源码 0183 实用收藏 pbootcms模板

本套自适应手机端的APP应用软件下载站PbootCMS模板,采用HTML5响应式技术。设计风格简洁高效,能够展示各类手机软件、游戏及教程资源。有助于软件下载站或应用商店在线上吸引流量与用户。模板展示 安装说明 网站后台:/admin.php 账号:admin 密码:admin 解压密码:www.4s…
👁 49
智能车场道闸设备企业网站模板 1036

智能车场道闸设备企业网站模板 1036 实用收藏 易优模板

一款针对智能车场与道闸设备企业的eyoucms网站模板。设计风格科技安全,能够展示停车场系统、道闸设备、智能管理解决方案及工程案例。有助于智能安防企业在线上展示产品,吸引物业与商业客户。模板展示 安装说明 网站后台:/login.php 账号:admin 密码:admin 相关文章易优CMS安装常见…
👁 43
生活常识热门资讯网站模板 0002

生活常识热门资讯网站模板 0002 实用收藏 易优模板

此套eyoucms模板专为生活常识与热门资讯类网站打造,设计风格简洁清晰,资讯层级分明。适合搭建生活百科、健康知识、实用技巧等综合性资讯平台,帮助内容创作者快速上线一个用户友好的信息分享站。模板展示 安装说明 网站后台:/login.php 账号:admin 密码:admin 相关文章易优CMS安装…
👁 32
(自适应手机端)HTML5响应式APP应用软件下载pbootcms网站模板 手机应用教程网站源码下载 0184

(自适应手机端)HTML5响应式APP应用软件下载pbootcms网站模板 手机应用教程网站源码下载 0184 实用收藏 pbootcms模板

一款自适应手机端的HTML5响应式APP应用软件下载PbootCMS网站模板。设计风格现代科技,适合展示APP应用介绍、下载链接及使用教程。是应用开发者或推广渠道搭建高转化率下载页的优质工具。模板展示 安装说明 网站后台:/admin.php 账号:admin 密码:admin 解压密码:www.4…
👁 41