2012-06-22 29 views
0

phpMyAdmin可以用LONGBLOG數據成功恢復1.6MB轉儲文件。我試圖複製這個功能,但我的功能似乎並沒有工作。我收到分段錯誤錯誤,它似乎從不執行任何備份文件的代碼。 (但它確實會丟掉表格)通過文件上傳(Mysql)恢復1.6mb sql

我相信segfault是在執行preg_split時。

這裏是恢復例行:(這不LONGBLOB數據上的小文件的偉大工程)

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

回答

0

它看起來像你需要添加一些代碼,以確保您有有效的文件內容。在調用preg_split之前,您沒有檢查以確保$sq有效(非空或空)。

+0

我發送的文件是一個有效的SQL文件,將會添加驗證。 –

+0

對不起。我的意思是檢查空字符串或空字符串。 –

+0

即將添加到。儘管如此,我認爲它有點偏離主題。如何解析大文件而不導致分段錯誤? –