2

ZipArchive とその仕組みに関して多くの質問があることは承知していますが、これらすべてを実行してもプログラムを動作させることができません。

私は死ぬメソッドを持っていて、どれもアクティブになっていないので、どこが間違っているのかわかりません。

$path = "/export/scripts/CLOUD/logs/web/Private_Testbox/Jan_28_2013_16_20_44_atvts78_rollout_config/";

$fileName = explode('/', $path);
$zipname = $fileName[count($fileName) - 2];

$zip = new ZipArchive;
$handle = opendir($path);

//Check whether Zip can be opened
if ($zip->open($zipname, ZIPARCHIVE::CREATE) !== TRUE) {
    die("Could not open archive");
}

//Add all files to an array
while ($file = readdir($handle)) 
{
    $zip->addFile($path, $file);
}

closedir($handle);
$zip->close();

//Send zip folder 
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename=' . $zipname . '.zip');
readfile($zip);

このファイルは zip フォルダーをダウンロードしますが、そこには何もありません。

事前に助けてくれてありがとう。

4

1 に答える 1

1

つまり、ファイルが実際に追加されdie()->addFile()と想定しているということです。

readfile() は、ディレクトリ内のファイルへのフルパスを返しません。実際の「ローカル」ファイル名のみを返します。つまり、スクリプトの現在の作業ディレクトリに存在しないファイルを追加していることを意味します。試す:

$zip->addFile($file, $path . $file);
              ^^^^^^^^^^^^^^^^^^^^^

代わりは。現在のところ、コードは$pathzipに埋め込むファイル名として使用しており、ディレクトリをファイル名として使用することはできません。がなければ$path . $file、 addFile は間違った場所を探しています。たとえば、getcwd() . $file代わりに相当します。

于 2013-01-30T14:52:53.507 に答える