首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将数据库备份文件转储到计算机的另一个磁盘和网络pc上?

问如何将数据库备份文件转储到计算机的另一个磁盘和网络pc上?
EN

Stack Overflow用户
提问于 2014-11-12 03:40:38
回答 2查看 415关注 0票数 0

我使用这段代码将数据库备份文件转储到htdocs中名为db_backup的文件夹中,并选择下载备份文件。

代码语言:javascript
复制
<?php
function export_tables($host,$user,$pass,$name,  $tables=false, $backup_name=false )
{
    $link = mysqli_connect($host,$user,$pass,$name);
    // Check connection
    if (mysqli_connect_errno())   {   echo "Failed to connect to MySQL: " . mysqli_connect_error();   }

    mysqli_select_db($link,$name);
    mysqli_query($link,"SET NAMES 'utf8'");

    //get all of the tables
    if($tables === false)
    {
        $tables = array();
        $result = mysqli_query($link,'SHOW TABLES');
        while($row = mysqli_fetch_row($result))
        {
            $tables[] = $row[0];
        }
    }
    else
    {
        $tables = is_array($tables) ? $tables : explode(',',$tables);
    }
    $return='';
    //cycle through
    foreach($tables as $table)
    {
        $result = mysqli_query($link,'SELECT * FROM `'.$table.'`');
        $num_fields = mysqli_num_fields($result);

        $row2 = mysqli_fetch_row(mysqli_query($link, 'SHOW CREATE TABLE `'.$table.'`'));
        $return.= "\n\n".$row2[1].";\n\n";

        for ($i = 0; $i < $num_fields; $i++) 
        {
            $st_counter= 0;
            while($row = mysqli_fetch_row($result))
            {
                //create new command if when starts and after 100 command cycle
                if ($st_counter%100 == 0 || $st_counter == 0 )  {
                    $return.= "\nINSERT INTO `".$table."` VALUES";
                }


                $return.="\n(";
                for($j=0; $j<$num_fields; $j++) 
                {
                    $row[$j] = addslashes($row[$j]);
                    $row[$j] = str_replace("\n","\\n",$row[$j]);
                    if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
                    if ($j<($num_fields-1)) { $return.= ','; }
                }
                $return.=")";


                //create new command if when starts and after 100 command cycle (but detect this 1 cycle earlier !)
                if ( ($st_counter+1)%100 == 0  && $st_counter != 0 )    {   $return.= ";";  }
                else                                                {   $return.= ",";  }
                //+++++++
                $st_counter = $st_counter +1 ;
            }
            //as we cant detect WHILE loop end, so, just detect, if last command ends with comma(,) then replace it with semicolon(;)
            if (substr($return, -1) == ',') {$return = substr($return, 0, -1). ';'; }
        }
        $return.="\n\n\n";
    }

    //save file
    $backup_name = $backup_name ? $backup_name : $name."___(".date('H-i-s')."_".date('d-m-Y').').sql';
    file_put_contents('db_backup/'.$backup_name,$return);
    echo 'SUCCESS. Download BACKUP file: <a target="_blank" href="'.'db_backup/'.$backup_name.'">'.$backup_name.'</a>';

}

if (!empty($_GET['delete_filee'])){ chdir(dirname(__file__));       
    if  (unlink($_GET['delete_filee'])) {die('file_deleted');} 
    else                                {die("file doesnt exist");}
}
?>

由下列人员执行:

代码语言:javascript
复制
<?php
                include("../dbbackup_function.php");
                export_tables("localhost","root","password","isys");
            ?>

我想知道如何将它保存在我的PC /服务器中的另一个磁盘中,以及网络PC中。

对于磁盘,我试过:

代码语言:javascript
复制
file_put_contents('D:/db_backup/'.$backup_name,$return);
        echo 'SUCCESS. Download BACKUP file: <a target="_blank" href="'.'D:/db_backup/'.$backup_name.'">'.$backup_name.'</a>';

转储正常,但下载没有。它的错误:

​

​

,那么我如何修复这个下载错误呢?

对于网络个人电脑,我试着:

代码语言:javascript
复制
file_put_contents('//DevServer/Users/Administrator/Downloads/test/'.$backup_name,$return);
            echo 'SUCCESS. Download BACKUP file: <a target="_blank" href="'.'//DevServer/Users/Administrator/Downloads/test/'.$backup_name.'">'.$backup_name.'</a>';

转储错误:

警告: file_put_contents(//DevServer/Users/Administrator/Downloads/test/test___(03-25-01_12-11-2014).sql) Function.file-put内容:未能打开流:第71行E:\xampp\htdocs\sample\test2.php中拒绝的权限

而下载错误对象没有找到。

,那么我怎样才能访问网络PC?我有凭据,只是不知道如何通过代码实现。

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2014-11-12 04:32:47

当您链接到存储在本地(或网络)驱动器上的文件时,请确保您使用file://预置路径。

类似的问题在How to open a pdf file located in a local c drive

票数 1
EN

Stack Overflow用户

发布于 2014-11-12 05:49:56

对于MySQL转储,您可以采取:

代码语言:javascript
复制
function export_tables($host, $user, $pass, $name, $tables=false, $backup_name=false )
{
    $tables = is_array($tables) ? implode(" ",$tables) : "";
    $backup_name = $backup_name ? $backup_name : $name."___(".date('H-i-s')."_".date('d-m-Y').').sql';
    $backup_path = dirname(__FILE__).DIRECTORY_SEPARATOR."db_backup".DIRECTORY_SEPARATOR.$backup_name;

    //****this part can be omited if mysqldump is a system variable
    $link = mysqli_connect($host,$user,$pass,$name);
    if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); }
    mysqli_select_db($link,$name);
    $mysql_home = mysqli_fetch_assoc(mysqli_query($link, "SELECT @@basedir as mysql_home"));
    $mysql_path = str_replace("/", DIRECTORY_SEPARATOR, $mysql_home["mysql_home"]."/bin/mysqldump");

    //****so instead of {$mysql_path} --> mysqldump
    exec("{$mysql_path} --add-drop-table --host={$host} --user={$user} --password={$pass} {$name} {$tables} > {$backup_path}");

    //this part is consider a security vulnerability so limited in some web browsers
    //here you check some answers for this (by @Spiral57):  http://stackoverflow.com/questions/23759756/how-to-open-href-to-local-file
    echo 'SUCCESS. Download BACKUP file: <a target="_blank" href="file:///'.$backup_path.'">'.$backup_name.'</a>';
}

并把它当作:

代码语言:javascript
复制
export_tables("localhost","root","password","isys",["table1","table2"]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26878861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档