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

ある私はのように見えるが何であるかは明らかであると思います。私はselectですべてのファイル名を取得してから、そのフォルダを見て、zip形式でダウンロードしたい。

print_r($res);file_1

からわずか1ファイルが含まれています。私は、エラー

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

がUPDATE持ってコードを実行すると、それでは私が今まで持っていることは

$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 
} 

です

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)に含まれていないと' foreachの(で '$ resArray' [ '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])"の前にexplode関数を使用し、各項目をチェックしてvalid_files配列 –

+0

に追加します。見せてもらえますか? –

関連する問題