可以使用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數據庫中,最後刪除臨時文件。
封裝成函數
使用方法如下:
try {
importSqlZip('http://example.com/backup.sql.zip', 'localhost', 'mydatabase', 'myusername', 'mypassword');
echo 'Import success!';
} catch (Exception $e) {
echo 'Error: ' . $e->getMessage();
}