2014-09-04 84 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); 
?> 

所以,我認爲這個問題是他究竟寫數據,如它是在新的txt文件,所以內容是測試\ NTEST \ n個真正新線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文件工作和備份文件我有數據庫。 – GEnGEr 2014-09-04 11:29:09