12

CodeIgniter に付属のユーザー ガイドを調べています。その方法にとても興味を持ちましたdbutil()。特に次のコード行:

// Load the DB utility class
$this->load->dbutil();

// Backup your entire database and assign it to a variable
$backup =& $this->dbutil->backup(); 

// Load the file helper and write the file to your server
$this->load->helper('file');
write_file('/path/to/mybackup.gz', $backup); 

// Load the download helper and send the file to your desktop
$this->load->helper('download');
force_download('mybackup.gz', $backup); 

現在ロードされている MySQL データベースをバックアップすることになっています。残念ながら、それは機能しておらず、次のメッセージが表示されます。

PHP エラーが発生しました

重大度: 通知

メッセージ: 未定義のプロパティ: CI_Loader::$dbutil

ファイル名: views/view.php

ライン番号: 10

致命的なエラー: 10 行目の C:\xampp\htdocs\CodeIgniter\application\views\view.php の非オブジェクトに対するメンバー関数 backup() の呼び出し

ここで何が欠けていますか?どんな助けでも本当に感謝しています。

4

16 に答える 16

31

これを試してみてください。必要に応じて、フォーマット zip を gz に変更できます:)

$this->load->dbutil();

$prefs = array(     
    'format'      => 'zip',             
    'filename'    => 'my_db_backup.sql'
    );


$backup =& $this->dbutil->backup($prefs); 

$db_name = 'backup-on-'. date("Y-m-d-H-i-s") .'.zip';
$save = 'pathtobkfolder/'.$db_name;

$this->load->helper('file');
write_file($save, $backup); 


$this->load->helper('download');
force_download($db_name, $backup);
于 2012-12-31T02:13:46.680 に答える
7

php を使用してそれを行うと、非常に小さなデータベースでのみ機能します。他のパフォーマンスの問題を増やすと、非常に速くメモリ制限に達します。

最適な方法は、mysqldump を使用してダンプを作成することです。

header('Content-type: application/force-download');
header('Content-Disposition: attachment; filename="dbbackup.sql.gz"');
passthru("mysqldump --user=xx --host=xx --password=xx dbname | gzip");

もちろん、それを行うには必要な権限が必要です。

于 2012-12-30T18:18:15.323 に答える
2
function backup($fileName='db_backup.zip'){
    // Load the DB utility class
    $this->load->dbutil();

    // Backup your entire database and assign it to a variable
    $backup =& $this->dbutil->backup();

    // Load the file helper and write the file to your server
    $this->load->helper('file');
    write_file(FCPATH.'/downloads/'.$fileName, $backup);

    // Load the download helper and send the file to your desktop
    $this->load->helper('download');
    force_download($fileName, $backup);
}

codeigniter を使用してデータベースをバックアップする簡単な方法

于 2016-02-29T11:29:33.397 に答える
1

運が良ければ、サーバーexec()で 、shell_exec()system()またはのいずれかpassthru()を有効にできます。多分あなたは以下を使いたいでしょう:

public function db_backup()
{
    $DBUSER=$this->db->username;
    $DBPASSWD=$this->db->password;
    $DATABASE=$this->db->database;

    $filename = $DATABASE . "-" . date("Y-m-d_H-i-s") . ".sql.gz";
    $mime = "application/x-gzip";

    header( "Content-Type: " . $mime );
    header( 'Content-Disposition: attachment; filename="' . $filename . '"' );

    // $cmd = "mysqldump -u $DBUSER --password=$DBPASSWD $DATABASE | gzip --best";   
    $cmd = "mysqldump -u $DBUSER --password=$DBPASSWD --no-create-info --complete-insert $DATABASE | gzip --best";

    passthru( $cmd );

    exit(0);
}
于 2014-04-24T10:04:22.307 に答える
1

私は CodeIgniter に非常に慣れていませんが、このバックアップに成功しました。これを試してみてください。正常に動作し、実装が非常に簡単です。コントローラーにコードを記述し、バックアップに使用するビュー ページから関数を呼び出します。設定して、行って、完了です。

function dbbackup()
{
    $this->load->dbutil();   
    $backup =& $this->dbutil->backup();  
    $this->load->helper('file');
    write_file('<?php echo base_url();?>/downloads', $backup);
    $this->load->helper('download');
    force_download('mybackup.gz', $backup);
}

完全なアプリケーション バックアップの場合は、次のコードを使用して同じ手順を実行します。

function backup()
{
    $this->load->helper('download');
    $this->load->library('zip'); 
    $time = time(); 
    $this->zip->read_dir('D:xampp/htdocs/wms/');
    $this->zip->download('my_backup.'.$time.'.zip');
}

ここでは、任意のパスを使用できます。

于 2014-12-19T11:08:05.057 に答える
1

これを試してみてください...テスト済みです...mysqliを使用する場合は正常に動作します...コードをコントローラーまたはモデルに配置できますが、これをyour_modelに保持してこれを呼び出すことをお勧めしますyour_controller の関数...

public function db_backup()
{
       $this->load->dbutil();   
       $backup =& $this->dbutil->backup();  
       $this->load->helper('file');
       write_file('your_file_path/your_DB.zip', $backup); 
}
于 2014-12-16T10:10:47.067 に答える
1
 public function backup(){
    $this->load->dbutil();
    $config = array(     
        'format'      => 'zip',             
        'filename'    => 'insert-file-name.sql'
    );

    $backup =& $this->dbutil->backup($config); 

    $db_name = 'backup-on-'. date("Y-m-d-H-i-s") .'.zip';
    $save = 'uploads/'.$db_name;

    $this->load->helper('file');
    write_file($save, $backup); 
    $this->load->helper('download');
    force_download($db_name, $backup);

}
于 2019-02-19T10:01:55.200 に答える
0

これらの行は、codeigniters のドキュメントから取得したものです。

重要: ユーティリティ クラスを初期化するには、ユーティリティ クラスがデータベース ドライバに依存しているため、データベース ドライバがすでに実行されている必要があります。

この関数を呼び出すときに、データベース クラスがロードされているかどうかを確認してください。または、dbutil クラスをロードする前にこの行を追加することもできます$this->load->database();

于 2012-12-31T08:33:32.227 に答える
0

これを試して!

$username = "root";
$password = "root";
$hostname = "localhost";
$dbname   = "raas";

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($dbname . "_" .date("Y-m-d_H-i-s").".sql"));

$command = "C:\AppServ\MySQL\bin\mysqldump --add-drop-table --host=$hostname   --user=$username --password=$password ".$dbname;

system($command);
于 2014-06-16T12:25:23.837 に答える
0

問題は、ブートストラップの非常に早い段階でデータベースをバックアップしようとしていることです。

以下を使用して CodeIgniter をハックしてデータベースをバックアップしようとしたときに、同じ問題に遭遇しました。

$prefs = array(
            'ignore'=> array('codes_cdt','codes_cpt','codes_icd10_dx_order','codes_icd10_pcs_order','pharma'),
            'format'=>'gzip','filename','add_drop'=> TRUE,'add_insert'=>TRUE,'newline'=> "\n");

$filename = APPPATH.'\\backups\\' .'backup-' . date('d-m-Y') . ' .gz';
if(!file_exists($filename)){
    get_instance()->load->dbutil();
    file_put_contents( $filename, $this->dbutil->backup($prefs));
}

私のファイルの一番下にありconfig.phpます。

これをモデルに移動してオートロードできるようにすれば問題ありません。

于 2014-12-08T05:36:50.273 に答える