详情页

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

时间:2023年10月04日

编辑:佚名

可以使用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数据库中,最后删除临时文件。
封装成函数 importSqlZip
使用方法如下:
try {
    importSqlZip('http://example.com/backup.sql.zip', 'localhost', 'mydatabase', 'myusername', 'mypassword');
    echo 'Import success!';
} catch (Exception $e) {
    echo 'Error: ' . $e->getMessage();
}
相关文章
猜你需要