2016-04-28 82 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

如何做到这一点。能给我看看么? –

相关问题