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"));
}
}