2016-12-28 28 views
1

追加されますが、何らかの理由で、それは私が理解しない...あまりにも私のローカルディスクのすべてを追加します。PHPは、私はzipファイルにすべての私のイメージをエクスポートするローカルディスク

$files = $urls; 
$zipname = 'uploads.zip'; 
$zip = new ZipArchive; 
$zip->open($zipname, ZipArchive::CREATE); 

foreach ($files as $file) { 
    $name = explode('/', $file); 
    $zip->addFile($file, pathinfo($file, PATHINFO_BASENAME)); 
} 

$zip->close(); 

header('Content-Type: application/zip'); 
header('Content-disposition: attachment; filename='.$zipname); 
header('Content-Length: ' . filesize($zipname)); 

readfile($zipname); 

$files画像の位置の配列です:

ServicesController.php on line 61: 
array:3 [▼ 
    0 => "C:\wamp\www\prjct\app/../../prjct/web/uploads/media/default/0001/15/thumb_14794_default_big.gif" 
    1 => "C:\wamp\www\prjct\app/../../prjct/web/uploads/media/default/0001/15/thumb_14794_default_small.gif" 
    2 => "C:\wamp\www\prjct\app/../../prjct/web/uploads/media/default/0001/15/thumb_14794_admin.gif" 
] 

私は私のzipファイルをopneとき、私はこの参照してください。

をこれは動作するはず

enter image description here

あなたは私のローカルディスクの魔女がここにあってはならない存在である見ることができるように...

+1

...しばらくの間、狂気私を運転していた変数をURLの?あなたはそれを印刷できますか? – nagiyevel

+0

作成したzipファイルをアップロードできますか?サイズは何ですか? – yivi

答えて

0

$files = $urls; 
$zipname = 'uploads.zip'; 
$zip = new ZipArchive; 
$zip->open($zipname, ZipArchive::CREATE); 

$rootPath = realpath($files); 
$files = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($rootPath), 
    RecursiveIteratorIterator::LEAVES_ONLY 
); 

foreach ($files as $name => $file) { 
    // Get real and relative path for current file 
    $filePath = $file->getRealPath(); 
    $relativePath = substr($filePath, strlen($rootPath) + 1); 

    // non-empty directories would be added automatically 
    if (!$file->isDir()){ 
     // Add current file to archive 
     $zip->addFile($filePath, $relativePath);  
    } 
} 

$zip->close(); 

一般的に、あなたはDIRECTORY_SEPARATOR定義済みの定数の代わりにスラッシュを使用するようにすべき/バックスラッシュ。これは、Windowsマシンで開発する場合に特に役立ちます。

通常、Windowsで作業する場合は、フォルダをzipに追加するときに末尾のスラッシュを削除してください。これがzipファイルにローカルディスクを作成したものです。

$localDirNoSlashes = rtrim($localDir, DIRECTORY_SEPARATOR); 
$zip->addEmptyDir($localDirNoSlashes); 

私は何が起こっているかを実現するまでこれが$である何

関連する問題