0

phpMyAdmin は、LONGBLOG データを含む 1.6MB のダンプ ファイルを正常に復元できます。この機能を再現しようとしていますが、機能していないようです。セグメンテーション違反エラーが表示され、バックアップ ファイルのコードがまったく実行されないようです。(ただし、テーブルは削除されます)

segfault は preg_split を実行しているときだと思います。

復元の手順は次のとおりです: (これは LONGBLOB DATA のない小さなファイルでうまく機能します)

function do_restore()
{
    $password=$this->input->post('password');
    if(!$this->Employee->authentication_check($password))
    {
        echo json_encode(array('success'=>false,'message'=>"failure"));
        exit();
    }
    else
    {
        $sq=file_get_contents($_FILES["file"]["tmp_name"]);
        $this->db->trans_start();
        $this->db->query('SET foreign_key_checks = 0');
        $tables = $this->db->list_tables();

        foreach ($tables as $table)
        {           
            $this->db->query('drop table '.$table);
        }

        $this->db->query('SET foreign_key_checks = 1');
        $queries = preg_split("/;+(?=([^'|^\\\']*['|\\\'][^'|^\\\']*['|\\\'])*[^'|^\\\']*[^'|^\\\']$)/", $sq); 
        foreach ($queries as $query) 
        {
            if($query) 
            {
                $this->db->query($query);
            } 
        }

        $this->db->trans_complete();
        echo json_encode(array('success'=>true,'message'=>"success"));
    }
}
4

1 に答える 1

0

ファイルの内容が有効であることを確認するために、コードを追加する必要があるようです。$sqへの呼び出しで使用される前に、それが有効であること (空でも null でもないこと)を確認していませんpreg_split

于 2012-06-22T00:54:35.273 に答える