红穆笔记
首頁 語言筆記 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(刪除)。
👁 146

推薦閱讀

安防监控类网站模板 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 /…
👁 59
(自适应手机端)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安裝…
👁 33
(自适应手机端)HTML5响应式APP应用软件下载pbootcms网站模板 手机应用教程网站源码下载 0184

(自適應手機端)HTML5響應式APP應用軟件下載pbootcms網站模板 手機應用教程網站源碼下載 0184 實用收藏 pbootcms模板

一款自適應手機端的HTML5響應式APP應用軟件下載PbootCMS網站模板。設計風格現代科技,適合展示APP應用介紹、下載鏈接及使用教程。是應用開發者或推廣渠道搭建高轉化率下載頁的優質工具。模板展示 安裝說明 網站後臺:/admin.php 賬號:admin 密碼:admin 解壓密碼:www.4…
👁 41