2014-09-04 2 views
0

У меня есть резервные данные из БД. который выглядит следующим образом:Создать исходный файл из текста

CREATE TABLE `accFiles` (
    `accfile_id` int(11) NOT NULL AUTO_INCREMENT, 
    `accfile_accountId` smallint(5) unsigned NOT NULL, 
    `accfile_name` varchar(100) NOT NULL, 
    `accfile_type` varchar(100) NOT NULL, 
    `accfile_size` int(11) NOT NULL, 
    `accfile_content` mediumblob NOT NULL, 
    `accfile_extension` varchar(10) NOT NULL, 
    PRIMARY KEY (`accfile_id`), 
    KEY `IDX_accountId` (`accfile_accountId`) 
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; 

INSERT INTO `accFiles` VALUES(1,6,"test.txt","text/plain",27,"test\ntest\ntest\ntest\ntsert","TXT"); 
INSERT INTO `accFiles` VALUES(2,6,"test.txt","text/plain",27,"test\ntest\ntest\ntest\ntsert","TXT"); 


CREATE TABLE..... 

Теперь я написал скрипт PHP, который получает часть контента и записывает его в файл с таким же именем, как это предусмотрено значением 3. Php записывается так, чтобы первая строка получила имя и содержимое и создала файл с таким именем и записывала в него содержимое.

<?php 
//error_reporting(0); 
$file = $argv[1];   //read console parameter 
$filep = file_get_contents($file);//get content 
$s1="INSERT INTO `accFiles`";  //Search the accfile part 
$pos=strpos($filep,$s1); //first File 
$end=strrpos($filep,$s1); //last file 
$ind=0; 

do{ // walk through file by file 
    $pos2=strpos($filep,$s1,$pos + 5); 
    $whant[$ind]=substr($filep,$pos+29,$pos2-$pos-30); 
    $ind++; 
    $pos=$pos2; 
}while(is_numeric($pos2) && $end>=$pos2); 


$whant[$ind-1]=substr($filep,$end+29,strpos($filep,"CREATE TABLE",$end)-$end-32); // last file 

//echo $whant[0]."\n"; 
//echo $whant[1]."\n"; 
$theidd = explode(",",$whant[0]); 
$filename = trim($theidd[2],"\""); 


$input = substr($whant[0],strpos($whant[0],$theidd[5])+1,strrpos($whant[0],",")-strpos($whant[0],$theidd[5])-2); //get content of file 1 

$myfile = fopen(dirname(__FILE__)."/".$filename, "w",1); 
fwrite($myfile, $input); 
fclose($myfile); 
?> 

Так я думаю, что проблема в том, что он записывает данные так же, как это в новом текстовом файле, так что содержание теста \ NTest \ п Insted реальных новых линий. Забавная часть, когда у меня есть .jpg файлы или .gif, они хранятся точно так же, как контент был длинным, я бы разместил его здесь. Но я хочу, чтобы иметь возможность получить исходное изображение или то, что когда-либо файл, он вернулся.

ответ

0

Более портативным вариантом будет установка MySQL и импорт резервной копии вашей базы данных. Тогда вы легко можете сделать следующее:

select accfile_name, accfile_content from accFiles 

перебрать возвращенного результата и писать каждый файл на диске, как показано в следующем фрагменте кода:

$outputdir = "/home/matthias/output/"; 
$sql = "select accfile_name, accfile_content from accFiles"; 
$result = mysql_query($sql, $db_con); 
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
    $filename = $row['accfile_name']; 
    $content = $row['accfile_content']; 
    $path = $outputdir . $filename; 
    $file = fopen($path, $content); 
    $fclose($file); 
} 
+0

извините, но я могу работать только с файлом PHP и у backupFile у меня есть база данных. – GEnGEr

Смежные вопросы