4
<?php
       $error = "";
       $file_folder = "temp/";
        // folder to load files
 if (extension_loaded('zip')) {
    // Checking ZIP extension is available
    $zip = new ZipArchive();
    // Load zip library
    $zip_name = "images_".date("d-m-Y") . ".zip";
    // Zip name
    if ($zip -> open($zip_name, ZIPARCHIVE::CREATE) !== TRUE) {
        // Opening zip file to load files
        $error .= "* Sorry ZIP creation failed at this time";
    }
    $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator("../uploads/"));
    $files = iterator_to_array($iterator, true);

    foreach ($iterator as $file) {
        $zip -> addFile($file_folder . $file);
        // Adding files into zip
    }
    print_r($zip);
    //echo $zip_name;
    if (file_exists($file_folder.$zip_name)) {
        // push to download the zip
        header('Content-type: application/zip');
        header('Content-Disposition: attachment; filename="' . $zip_name . '"');
        readfile($zip_name);
        // remove zip file is exists in temp path
        unlink($zip_name);
    } else {
        echo "error";
    }

    $zip -> close();
//} else
//  $error .= "* Please select file to zip ";
 } else
$error .= "* You dont have ZIP extension";

?>

$ zipオブジェクトを出力しようとしましたが、次の応答がありました:ZipArchive Object([status] => 0 [statusSys] => 0 [numFiles] => 12 [filename] => / var / www / bigb / ajax / images_24-12 -2012.zip[コメント]=>)

ステータスゼロは、zipの作成中にエラーが発生しなかったことを説明しています(参照:http ://www.php.net/manual/en/zip.constants.php )

私は投稿を参照しました:1)ウェブサイトの単一のディレクトリからすべての画像をダウンロードします 2)phpを使用してzipファイルを作成し、ユーザーがダウンロードした後にそれを削除するにはどうすればよいですか? 3)http://www.9lessons.info/2012/06/creating-zip-file-with-php.html

3つ目は私を最も助け、他の2つでは23としてステータスを取得していました。

問題:zipを作成できますが、ダウンロードに問題はありませんが、zipを開くと、内部にファイルが表示されませんが、zipにはmb単位のメモリがあります。

私を助けてください...

更新:エラー23は、print_r / echoが原因で発生するか、同じファイルを上書きしようとしたために発生します。

Update2:問題は解決しました。コードをメインフォルダーに移動し、パスを(uploads /)に変更すると、RecursiveDirectoryIteratorのパス(つまり../uploads/)が原因で、すべてが正常に機能し始めました。称賛!!!

4

2 に答える 2

1

コードをメインフォルダーに移動し、パスを (uploads/) に変更すると、RecursiveDirectoryIterator (つまり ../uploads/) のパスが原因で、すべてが正常に機能し始めました。称賛!!!

于 2012-12-25T11:57:55.880 に答える
0

あなたが提供しているファイルパス$zip->addFile()が間違っていると思います。に何も追加する必要はありません$file。以下が機能します:

foreach ($iterator as $file) {
    $zip -> addFile($file);
}

あなたの場合、の$fileようなファイルの正確な相対パスが含まれます../uploads/file.ext

于 2012-12-24T20:39:08.710 に答える