0

以前の投稿から、PHP を使用して ZIP ファイルを作成するスクリプトを見つけました。

このスクリプトを使用すると、zip ファイルを作成できますが、任意のディレクトリに作成することはできません。これが元のコードです。

    <?php
    // Config Vars 

    $sourcefolder =   "uploads/output" ; // Default: "./" 
    $zipfilename  = "myarchive.zip"; // Default: "myarchive.zip"
    $timeout      = 5000           ; // Default: 5000

    // instantate an iterator (before creating the zip archive, just
    // in case the zip file is created inside the source folder)
    // and traverse the directory to get the file list.
    $dirlist = new RecursiveDirectoryIterator($sourcefolder);
    $filelist = new RecursiveIteratorIterator($dirlist);

    // set script timeout value 
    ini_set('max_execution_time', $timeout);

    // instantate object
    $zip = new ZipArchive();

    // create and open the archive 
    if ($zip->open("$zipfilename", ZipArchive::CREATE) !== TRUE) {
        die ("Could not open archive");
    }

    // add each file in the file list to the archive
    foreach ($filelist as $key=>$value) {
        $zip->addFile(realpath($key), $key) or die ("ERROR: Could not add file: $key");
    }

    // close the archive
    $zip->close();
    echo "<br>Archive ". $zipfilename . " created successfully - ";

    // And provide download link ?>
    <a href="http:<?php echo $zipfilename;?>" target="_blank">Download <?php echo $zipfilename?></a> 

インターネットで数時間を費やした後、解決策が見つからなかったため、スクリプトの宛先を決定できるようにコードを修正してみました。いくつかの解決策は、 $zipfilename = "myarchive.zip"; を変更する場所を提案しました。to $zipfilename = "uploads/output/myarchive.zip"; ただし、ダウンロード リンクへのURL には、次のように表示したいと考えています

したがって、このコードを試しましたが、うまくいきませんでした。何を間違えたのかわからない。

<?php
// Config Vars 

$sourcefolder =   "uploads/output" ; // Default: "./" 
$destfolder  = "uploads/output/"; // Default: "myarchive.zip"
$zipfilename  = "myarchive.zip"; // Default: "myarchive.zip"
$timeout      = 5000           ; // Default: 5000

// instantate an iterator (before creating the zip archive, just
// in case the zip file is created inside the source folder)
// and traverse the directory to get the file list.
$dirlist = new RecursiveDirectoryIterator($sourcefolder);
$filelist = new RecursiveIteratorIterator($dirlist);

// set script timeout value 
ini_set('max_execution_time', $timeout);

// instantate object
$zip = new ZipArchive();

// create and open the archive 
if ($zip->open(''.$destfolder.''.$zipfilename.'', ZipArchive::CREATE) !== TRUE) {
    die ("Could not open archive");
}

// add each file in the file list to the archive
foreach ($filelist as $key=>$value) {
    $zip->addFile(realpath($key), $key) or die ("ERROR: Could not add file: $key");
}

// close the archive
$zip->close();
echo "<br>Archive ". $zipfilename . " created successfully - ";

// And provide download link ?>
<a href="http:<?php echo $zipfilename;?>" target="_blank">Download <?php echo $zipfilename?></a> 
4

1 に答える 1