2016-04-28 57 views
0

我有用於存儲文件名的數據庫表。它們存儲在3列中,每列可以存儲多個用逗號分隔的文件。就像這樣:file_idfile_1file_2file_3是列名從mysql中的3列中選擇文件並將它們壓縮

file_id | file_1      | file_2     | file_3 
    1  file_1.txt, file_1.1.txt.. | file_2.txt,file_2.2.txt | file_3.txt,file_3.3.txt 

我希望是明確什麼是什麼樣子的。我希望選擇所有文件名,然後查看文件夾並以zip格式下載。所以,我有什麼直到現在

$filePath = 'uploads/'; 
$sql = "SELECT * FROM uploads WHERE file_id = 1"; // just for testing 
    $result = $pdo->prepare($sql); 
    //$result->bindParam(":id", $id); 
    $result->execute();     

    $resArray = $result->fetch();  

foreach(['file_1', 'file_2', 'file_3'] as $col){ 
    if (file_exists($filePath . $resArray[$col])){ 
     $valid_files[] = $resArray[$col]; 
    } 
} 

if(count($valid_files > 0)){ 
    $zip = new ZipArchive(); 
    $zip_name = "zipfile.zip"; 
    if($zip->open($zip_name, ZIPARCHIVE::CREATE)!==TRUE){ 
     $error .= "* Sorry ZIP creation failed at this time"; 
    } 

    foreach($valid_files as $res){ 

     $zip->addFile($filePath.$res['file_1']); 
     $zip->addFile($filePath.$res['file_2']); 
     $zip->addFile($filePath.$res['file_3']); 

    } 
    //print_r($valid_files); 
    $zip->close(); 
    // zip download 
} 

當我跑我有錯誤

代碼
Warning: Illegal string offset 'file_1' in ... 
Warning: Illegal string offset 'file_2' in ... 
Warning: Illegal string offset 'file_3' in ... 

UPDATE:

print_r($res);只包含1個文件從file_1

file_1.txt

print_r($resArray);包含的所有文件從所有列..和奇怪的事情是,每個文件在陣列2倍

陣列([file_1] => file_1.txt [0] => file_1.txt [file_2] => file_2.txt,[1] => file_2.txt,[file_3] => file_3.txt,file_3.3.txt .jpg,file_3.3.txt,file_3.3.txt,file_3.3 .txt,[2] => file_3.3.txt,file_3.3.txt,file_3.3.txt,file_3.3.txt,file_3.3.txt,)

+0

什麼'$ res'包含在'的foreach($ valid_files)'和'$ resArray'在'的foreach([ 'file_1' ,...])? – Justinas

+0

我已更新我的問題 –

回答

1

只是改變一下這個部分對:

foreach(['file_1', 'file_2', 'file_3'] as $col){ 
    $items = explode(',', $resArray[$col]); 
    foreach ($items as $item) { 

     if (file_exists($filePath . trim($item))){ 
      $valid_files[] = $filePath . trim($item); 
     } 
    } 
} 

然後你就可以使用它像這裏:

foreach($valid_files as $res){ 
    $zip->addFile($res); 
} 
+0

感謝您的回答。這種方式是從第一列僅下載1個文件。 –

+0

然後在「file_exists($ filePath。$ resArray [$ col])」之前使用爆炸函數,然後檢查每個項目並將其添加到valid_files數組中 –

+0

如何做到這一點。能給我看看麼? –

相關問題