PHP kullanarak bütün bir klasör nasıl sıkıştırılır


132

Burada stackoveflow'da belirli bir dosyanın nasıl ZIPlanacağına dair bazı kodlar buldum, ancak belirli bir klasöre ne dersiniz?

Folder/
  index.html
  picture.jpg
  important.txt

içinde My Folderdosyalar var. sıkıştırdıktan sonra My Folder, klasörün hariç tüm içeriğini de silmek istiyorum important.txt.

Bunu burada yığında buldum

Yardımınıza ihtiyaçım var. Teşekkürler.


Görebildiğim kadarıyla, sağladığınız stackoverflow bağlantısı aslında birden çok dosyayı sıkıştırıyor. Hangi bölümde sorun yaşıyorsun?
Lasse Espeholt

@lasseespeholt Size verdiğim bağlantı, klasör ve klasörün içeriğini değil, yalnızca belirli bir dosyayı sıkıştırıyor ..
woninana

Bir dizi dosyayı alır (esasen bir klasör) ve tüm dosyaları zip dosyasına (döngü) ekler. Şimdi güzel bir cevabın gönderildiğini görebiliyorum +1 :) aynı kod, dizi artık bir dizindeki dosyaların bir listesi.
Lasse Espeholt


Yanıtlar:


321

Kod güncellendi 2015/04/22.

Bütün bir klasörü sıkıştırın:

// Get real path for our folder
$rootPath = realpath('folder-to-zip');

// Initialize archive object
$zip = new ZipArchive();
$zip->open('file.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE);

// Create recursive directory iterator
/** @var SplFileInfo[] $files */
$files = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($rootPath),
    RecursiveIteratorIterator::LEAVES_ONLY
);

foreach ($files as $name => $file)
{
    // Skip directories (they would be added automatically)
    if (!$file->isDir())
    {
        // Get real and relative path for current file
        $filePath = $file->getRealPath();
        $relativePath = substr($filePath, strlen($rootPath) + 1);

        // Add current file to archive
        $zip->addFile($filePath, $relativePath);
    }
}

// Zip archive will be created only after closing object
$zip->close();

Tüm klasörü sıkıştırın + "important.txt" dışındaki tüm dosyaları silin:

// Get real path for our folder
$rootPath = realpath('folder-to-zip');

// Initialize archive object
$zip = new ZipArchive();
$zip->open('file.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE);

// Initialize empty "delete list"
$filesToDelete = array();

// Create recursive directory iterator
/** @var SplFileInfo[] $files */
$files = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($rootPath),
    RecursiveIteratorIterator::LEAVES_ONLY
);

foreach ($files as $name => $file)
{
    // Skip directories (they would be added automatically)
    if (!$file->isDir())
    {
        // Get real and relative path for current file
        $filePath = $file->getRealPath();
        $relativePath = substr($filePath, strlen($rootPath) + 1);

        // Add current file to archive
        $zip->addFile($filePath, $relativePath);

        // Add current file to "delete list"
        // delete it later cause ZipArchive create archive only after calling close function and ZipArchive lock files until archive created)
        if ($file->getFilename() != 'important.txt')
        {
            $filesToDelete[] = $filePath;
        }
    }
}

// Zip archive will be created only after closing object
$zip->close();

// Delete all files from "delete list"
foreach ($filesToDelete as $file)
{
    unlink($file);
}

2
Chmod'u (yazılabilir) dir (bu komut dosyasının bulunduğu yerde) 777 olarak ayarlamalısınız. Örneğin: Eğer betik /var/www/localhost/script.php içinde bulunuyorsa, o zaman dir / var / www / localhost üzerinde chmod 0777'yi ayarlamanız gerekir. /.
Dador

3
Dosyaları aramadan önce silmek $zip->close()işe yaramayacaktır. Cevabımı burada
hek2mgl

10
@alnassre, "önemli.txt hariç klasörün tüm içeriğini de silmek istiyorum" sorusundaki şarttır. Ayrıca çalıştırmadan önce daima kodu okumanızı tavsiye ederim.
Dador

1
@alnassre hahahaha ... üzgünüm :) ... hahaha
Ondrej Rafaj

1
@ nick-newman, evet, yüzdeyi hesaplamak için php.net/manual/ru/function.iterator-count.php + counter içinde döngü kullanabilirsiniz. Sıkıştırma seviyesi ile ilgili olarak - şu anda ZipArchive ile mümkün değil: stackoverflow.com/questions/1833168/…
Dador

54

ZipArchive sınıfında yararlı bir belgelenmemiş yöntem vardır: addGlob ();

$zipFile = "./testZip.zip";
$zipArchive = new ZipArchive();

if ($zipArchive->open($zipFile, (ZipArchive::CREATE | ZipArchive::OVERWRITE)) !== true)
    die("Failed to create archive\n");

$zipArchive->addGlob("./*.txt");
if ($zipArchive->status != ZIPARCHIVE::ER_OK)
    echo "Failed to write files to zip\n";

$zipArchive->close();

Şimdi şu adreste belgeleniyor: www.php.net/manual/en/ziparchive.addglob.php


2
@netcoder - phpt'yi test etmek için yazmış olmanın faydaları ... temel olarak, ZipArchive sınıfının kaynağını okuyun ve orada bulun ... ayrıca bir regexp stili kalıbı alan belgelenmemiş bir addPattern () yöntemi de vardır, ama bunu çalıştırmayı asla başaramadım (sınıfta bir hata olabilir)
Mark Baker

1
@kread - bunu glob () kullanarak ayıklanabilen herhangi bir dosya listesiyle kullanabilirsiniz, bu yüzden keşfettiğimden beri son derece yararlı buldum.
Mark Baker

@MarkBaker Bu yorumun siz gönderdikten yıllar sonra geldiğini biliyorum, sadece burada şansımı deniyorum. Burada sıkıştırmayla ilgili bir soru da yayınladım . Burada yayınladığınız glob yöntemini denemek üzereyim, ancak asıl sorunum addFromString'i kullanamamam ve sessizce başarısız olan addFile'ı kullanmam. Neyin yanlış gittiği veya neyi yanlış yaptığım hakkında bir fikriniz var mı?
Skytiger

@ user1032531 - yazımın son satırı (13 Aralık 2013 tarihinde düzenlendi), dokümanlar sayfasına bir bağlantıyla tam olarak bunu gösteriyor
Mark Baker

6
addGlobözyinelemeli?
Vincent Poirier

20

Bunu dene:

$zip = new ZipArchive;
$zip->open('myzip.zip', ZipArchive::CREATE);
foreach (glob("target_folder/*") as $file) {
    $zip->addFile($file);
    if ($file != 'target_folder/important.txt') unlink($file);
}
$zip->close();

Bu alışkanlık yinelemeli olsa zip.


Kesinlikle içindeki bazı dosyaları My folderMy folderMy folder
siliyor

@Stupefy: Onun if (!is_dir($file) && $file != 'target_folder...')yerine deneyin . Veya yinelemeli olarak zip yapmak istiyorsanız @kread cevabını kontrol edin , bu en etkili yoldur.
netcoder

İçindeki klasör My folderhala silinmedi, ancak yine de başka hata yok.
woninana

Ayrıca oluşturulmuş .zip dosyası olmadığını da söylemeyi unuttum.
woninana

1
Dosyaları aramadan önce silmek $zip->close()işe yaramayacaktır. Cevabımı burada
hek2mgl

19

Bunun zip uygulamasının arama yolunda olduğu bir sunucuda çalıştığını varsayıyorum. Tüm unix tabanlı ve sanırım çoğu Windows tabanlı sunucu için doğru olmalıdır.

exec('zip -r archive.zip "My folder"');
unlink('My\ folder/index.html');
unlink('My\ folder/picture.jpg');

Arşiv daha sonra archive.zip içinde yer alacaktır. Dosya veya klasör adlarındaki boşlukların yaygın bir hata nedeni olduğunu ve mümkünse kaçınılması gerektiğini unutmayın.


15

Aşağıdaki kod ile denedim ve çalışıyor. Kod kendinden açıklamalıdır, herhangi bir sorunuz olursa lütfen bana bildirin.

<?php
class FlxZipArchive extends ZipArchive 
{
 public function addDir($location, $name) 
 {
       $this->addEmptyDir($name);
       $this->addDirDo($location, $name);
 } 
 private function addDirDo($location, $name) 
 {
    $name .= '/';
    $location .= '/';
    $dir = opendir ($location);
    while ($file = readdir($dir))
    {
        if ($file == '.' || $file == '..') continue;
        $do = (filetype( $location . $file) == 'dir') ? 'addDir' : 'addFile';
        $this->$do($location . $file, $name . $file);
    }
 } 
}
?>

<?php
$the_folder = '/path/to/folder/to/be/zipped';
$zip_file_name = '/path/to/zip/archive.zip';
$za = new FlxZipArchive;
$res = $za->open($zip_file_name, ZipArchive::CREATE);
if($res === TRUE) 
{
    $za->addDir($the_folder, basename($the_folder));
    $za->close();
}
else{
echo 'Could not create a zip archive';
}
?>

Mükemmel çözüm. Laravel 5.5'te de çalışır. gerçekten beğendim. (y)
Web Artisan

1
Harika kod! Temiz, basit ve mükemmel çalışıyor! ;) Bana en iyi cevap gibi görünüyor. Birisine yardımcı olabilirse: ini_set('memory_limit', '512M');Betiğin yürütülmesinden önce ve ini_restore('memory_limit');sonunda ekledim . Ağır klasörler durumunda bellek eksikliğinden kaçınmak gerekiyordu (500MB'den büyük bir klasördü).
Jacopo Pace

1
Ortamımda (PHP 7.3, Debian) dizin listesi olmayan bir ZIP arşivi oluşturuldu (büyük, boş dosya). Aşağıdaki satırı değiştirmek zorunda kaldım: $ isim. = '/'; $ isim = ($ isim == '.'? '': $ isim. '/');
Gerfried

Bu benim için çalışıyor. Paylaşım için teşekkürler. Şerefe!
Sathiska

8

Bu, tüm bir klasörü ve içeriğini bir zip dosyasına sıkıştıran bir işlevdir ve bunu şu şekilde basitçe kullanabilirsiniz:

addzip ("path/folder/" , "/path2/folder.zip" );

işlev:

// compress all files in the source directory to destination directory 
    function create_zip($files = array(), $dest = '', $overwrite = false) {
    if (file_exists($dest) && !$overwrite) {
        return false;
    }
    if (($files)) {
        $zip = new ZipArchive();
        if ($zip->open($dest, $overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {
            return false;
        }
        foreach ($files as $file) {
            $zip->addFile($file, $file);
        }
        $zip->close();
        return file_exists($dest);
    } else {
        return false;
    }
}

function addzip($source, $destination) {
    $files_to_zip = glob($source . '/*');
    create_zip($files_to_zip, $destination);
    echo "done";
}

Bu komut dosyasıyla otomatik olarak yedeklemeye alt klasörler nasıl dahil edilir? @Alireza
floCoder

2

Neden EFS PhP-ZiP MultiVolume Script'i Denemiyorsunuz ... Yüzlerce işi ve milyonlarca dosyayı sıkıştırıp aktardım ... Etkili bir arşiv oluşturmak için ssh gerekiyor.

Ancak ortaya çıkan dosyaların doğrudan php'den exec ile kullanılabileceğine inanıyorum:

exec('zip -r backup-2013-03-30_0 . -i@backup-2013-03-30_0.txt');

İşe yarayıp yaramadığını bilmiyorum. Denemedim ...

"işin sırrı", arşivleme için yürütme süresinin PHP kodunun çalıştırılması için izin verilen süreyi aşmaması gerektiğidir.


1

Bu, PHP'de ZIP oluşturmanın çalışan bir örneğidir:

$zip = new ZipArchive();
$zip_name = time().".zip"; // Zip name
$zip->open($zip_name,  ZipArchive::CREATE);
foreach ($files as $file) {
  echo $path = "uploadpdf/".$file;
  if(file_exists($path)){
  $zip->addFromString(basename($path),  file_get_contents($path));---This is main function  
  }
  else{
   echo"file does not exist";
  }
}
$zip->close();

1

Bu gönderiyi google'da ikinci en iyi sonuç olarak buldum, ilki exec :(

Her neyse, bu benim ihtiyaçlarımı tam olarak karşılamasa da .. Hızlı ama genişletilmiş versiyonumla başkaları için bir cevap göndermeye karar verdim.

YAZI ÖZELLİKLERİ

  • Günlük yedekleme dosyası adlandırma, PREFIX-YYYY-AA-GG-POSTFIX.EXTENSION
  • Dosya Bildirme / Eksik
  • Önceki Yedeklemeler Listesi
  • Önceki yedekleri sıkıştırmaz / içermez;)
  • Windows / linux üzerinde çalışır

Her neyse, senaryoya .. Çok görünse de .. Burada fazlalık olduğunu unutmayın .. Bu yüzden gerektiğinde raporlama bölümlerini silmekten çekinmeyin ...

Ayrıca dağınık görünebilir ve bazı şeyler kolayca temizlenebilir ... Bu yüzden yorum yapmayın, sadece basit yorumların atıldığı hızlı bir komut dosyası .. CANLI KULLANIM İÇİN DEĞİL .. Ama canlı kullanım için temizlenmesi kolaydır !

Bu örnekte, kök www / public_html klasörünün içindeki bir dizinden çalıştırılır .. Bu nedenle, köke ulaşmak için yalnızca bir klasör yukarı gitmesi gerekir.

<?php
    // DIRECTORY WE WANT TO BACKUP
    $pathBase = '../';  // Relate Path

    // ZIP FILE NAMING ... This currently is equal to = sitename_www_YYYY_MM_DD_backup.zip 
    $zipPREFIX = "sitename_www";
    $zipDATING = '_' . date('Y_m_d') . '_';
    $zipPOSTFIX = "backup";
    $zipEXTENSION = ".zip";

    // SHOW PHP ERRORS... REMOVE/CHANGE FOR LIVE USE
    ini_set('display_errors',1);
    ini_set('display_startup_errors',1);
    error_reporting(-1);




// ############################################################################################################################
//                                  NO CHANGES NEEDED FROM THIS POINT
// ############################################################################################################################

    // SOME BASE VARIABLES WE MIGHT NEED
    $iBaseLen = strlen($pathBase);
    $iPreLen = strlen($zipPREFIX);
    $iPostLen = strlen($zipPOSTFIX);
    $sFileZip = $pathBase . $zipPREFIX . $zipDATING . $zipPOSTFIX . $zipEXTENSION;
    $oFiles = array();
    $oFiles_Error = array();
    $oFiles_Previous = array();

    // SIMPLE HEADER ;)
    echo '<center><h2>PHP Example: ZipArchive - Mayhem</h2></center>';

    // CHECK IF BACKUP ALREADY DONE
    if (file_exists($sFileZip)) {
        // IF BACKUP EXISTS... SHOW MESSAGE AND THATS IT
        echo "<h3 style='margin-bottom:0px;'>Backup Already Exists</h3><div style='width:800px; border:1px solid #000;'>";
            echo '<b>File Name: </b>',$sFileZip,'<br />';
            echo '<b>File Size: </b>',$sFileZip,'<br />';
        echo "</div>";
        exit; // No point loading our function below ;)
    } else {

        // NO BACKUP FOR TODAY.. SO START IT AND SHOW SCRIPT SETTINGS
        echo "<h3 style='margin-bottom:0px;'>Script Settings</h3><div style='width:800px; border:1px solid #000;'>";
            echo '<b>Backup Directory: </b>',$pathBase,'<br /> ';
            echo '<b>Backup Save File: </b>',$sFileZip,'<br />';
        echo "</div>";

        // CREATE ZIPPER AND LOOP DIRECTORY FOR SUB STUFF
        $oZip = new ZipArchive;
        $oZip->open($sFileZip,  ZipArchive::CREATE | ZipArchive::OVERWRITE);
        $oFilesWrk = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($pathBase),RecursiveIteratorIterator::LEAVES_ONLY);
        foreach ($oFilesWrk as $oKey => $eFileWrk) {
            // VARIOUS NAMING FORMATS OF THE CURRENT FILE / DIRECTORY.. RELATE & ABSOLUTE
            $sFilePath = substr($eFileWrk->getPathname(),$iBaseLen, strlen($eFileWrk->getPathname())- $iBaseLen);
            $sFileReal = $eFileWrk->getRealPath();
            $sFile = $eFileWrk->getBasename();

            // WINDOWS CORRECT SLASHES
            $sMyFP = str_replace('\\', '/', $sFileReal);

            if (file_exists($sMyFP)) {  // CHECK IF THE FILE WE ARE LOOPING EXISTS
                if ($sFile!="."  && $sFile!="..") { // MAKE SURE NOT DIRECTORY / . || ..
                    // CHECK IF FILE HAS BACKUP NAME PREFIX/POSTFIX... If So, Dont Add It,, List It
                    if (substr($sFile,0, $iPreLen)!=$zipPREFIX && substr($sFile,-1, $iPostLen + 4)!= $zipPOSTFIX.$zipEXTENSION) {
                        $oFiles[] = $sMyFP;                     // LIST FILE AS DONE
                        $oZip->addFile($sMyFP, $sFilePath);     // APPEND TO THE ZIP FILE
                    } else {
                        $oFiles_Previous[] = $sMyFP;            // LIST PREVIOUS BACKUP
                    }
                }
            } else {
                $oFiles_Error[] = $sMyFP;                       // LIST FILE THAT DOES NOT EXIST
            }
        }
        $sZipStatus = $oZip->getStatusString();                 // GET ZIP STATUS
        $oZip->close(); // WARNING: Close Required to append files, dont delete any files before this.

        // SHOW BACKUP STATUS / FILE INFO
        echo "<h3 style='margin-bottom:0px;'>Backup Stats</h3><div style='width:800px; height:120px; border:1px solid #000;'>";
            echo "<b>Zipper Status: </b>" . $sZipStatus . "<br />";
            echo "<b>Finished Zip Script: </b>",$sFileZip,"<br />";
            echo "<b>Zip Size: </b>",human_filesize($sFileZip),"<br />";
        echo "</div>";


        // SHOW ANY PREVIOUS BACKUP FILES
        echo "<h3 style='margin-bottom:0px;'>Previous Backups Count(" . count($oFiles_Previous) . ")</h3><div style='overflow:auto; width:800px; height:120px; border:1px solid #000;'>";
        foreach ($oFiles_Previous as $eFile) {
            echo basename($eFile) . ", Size: " . human_filesize($eFile) . "<br />";
        }
        echo "</div>";

        // SHOW ANY FILES THAT DID NOT EXIST??
        if (count($oFiles_Error)>0) {
            echo "<h3 style='margin-bottom:0px;'>Error Files, Count(" . count($oFiles_Error) . ")</h3><div style='overflow:auto; width:800px; height:120px; border:1px solid #000;'>";
            foreach ($oFiles_Error as $eFile) {
                echo $eFile . "<br />";
            }
            echo "</div>";
        }

        // SHOW ANY FILES THAT HAVE BEEN ADDED TO THE ZIP
        echo "<h3 style='margin-bottom:0px;'>Added Files, Count(" . count($oFiles) . ")</h3><div style='overflow:auto; width:800px; height:120px; border:1px solid #000;'>";
        foreach ($oFiles as $eFile) {
            echo $eFile . "<br />";
        }
        echo "</div>";

    }


    // CONVERT FILENAME INTO A FILESIZE AS Bytes/Kilobytes/Megabytes,Giga,Tera,Peta
    function human_filesize($sFile, $decimals = 2) {
        $bytes = filesize($sFile);
        $sz = 'BKMGTP';
        $factor = floor((strlen($bytes) - 1) / 3);
        return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) . @$sz[$factor];
    }
?>

BU NE İŞE YARIYOR??

Basitçe $ pathBase değişkeninin tüm içeriğini sıkıştıracak ve zip'i aynı klasörde depolayacaktır. Önceki yedeklemeler için basit bir algılama yapar ve bunları atlar.

CRON YEDEKLEME

Bu betik Linux üzerinde test ettiğim ve pathBase için mutlak bir url kullanarak bir cron işinden iyi çalıştı.


Silme komut dosyasını da dahil etmedim, bunun için kabul edilen cevabı görebilirsiniz
Angry 84

Nedenini açıklayan bir yorum yapmadan bu rastgele aleyhte oyları sevmelisin.
Angry 84

1

Bu işlevi kullanın:

function zip($source, $destination)
{
    if (!extension_loaded('zip') || !file_exists($source)) {
        return false;
    }

    $zip = new ZipArchive();
    if (!$zip->open($destination, ZIPARCHIVE::CREATE)) {
        return false;
    }

    $source = str_replace('\\', '/', realpath($source));

    if (is_dir($source) === true) {
        $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST);

        foreach ($files as $file) {
            $file = str_replace('\\', '/', $file);

            // Ignore "." and ".." folders
            if (in_array(substr($file, strrpos($file, '/')+1), array('.', '..'))) {
                continue;
            }               

            $file = realpath($file);

            if (is_dir($file) === true) {
                $zip->addEmptyDir(str_replace($source . '/', '', $file . '/'));
            } elseif (is_file($file) === true) {
                $zip->addFromString(str_replace($source . '/', '', $file), file_get_contents($file));
            }
        }
    } elseif (is_file($source) === true) {
        $zip->addFromString(basename($source), file_get_contents($source));
    }

    return $zip->close();
}

Örnek kullanım:

zip('/folder/to/compress/', './compressed.zip');

1

Kullan bu iyi çalışıyor.

$dir = '/Folder/';
$zip = new ZipArchive();
$res = $zip->open(trim($dir, "/") . '.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE);
if ($res === TRUE) {
    foreach (glob($dir . '*') as $file) {
        $zip->addFile($file, basename($file));
    }
    $zip->close();
} else {
    echo 'Failed to create to zip. Error: ' . $res;
}

1

PHP'de bir zip klasörü oluşturun.

Zip oluşturma yöntemi

   public function zip_creation($source, $destination){
    $dir = opendir($source);
    $result = ($dir === false ? false : true);

    if ($result !== false) {

        
        $rootPath = realpath($source);
         
        // Initialize archive object
        $zip = new ZipArchive();
        $zipfilename = $destination.".zip";
        $zip->open($zipfilename, ZipArchive::CREATE | ZipArchive::OVERWRITE );
         
        // Create recursive directory iterator
        /** @var SplFileInfo[] $files */
        $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($rootPath), RecursiveIteratorIterator::LEAVES_ONLY);
         
        foreach ($files as $name => $file)
        {
            // Skip directories (they would be added automatically)
            if (!$file->isDir())
            {
                // Get real and relative path for current file
                $filePath = $file->getRealPath();
                $relativePath = substr($filePath, strlen($rootPath) + 1);
         
                // Add current file to archive
                $zip->addFile($filePath, $relativePath);
            }
        }
         
        // Zip archive will be created only after closing object
        $zip->close();
        
        return TRUE;
    } else {
        return FALSE;
    }


}

Zip yöntemini çağırın

$source = $source_directory;
$destination = $destination_directory;
$zipcreation = $this->zip_creation($source, $destination);

0

Senaryoda küçük bir iyileştirme yaptım.

  <?php
    $directory = "./";
    //create zip object
    $zip = new ZipArchive();
    $zip_name = time().".zip";
    $zip->open($zip_name,  ZipArchive::CREATE);
    $files = new RecursiveIteratorIterator(
        new RecursiveDirectoryIterator($directory),
        RecursiveIteratorIterator::LEAVES_ONLY
    );
    foreach ($files as $file) {
        $path = $file->getRealPath();
        //check file permission
        if(fileperms($path)!="16895"){
            $zip->addFromString(basename($path),  file_get_contents($path)) ;
            echo "<span style='color:green;'>{$path} is added to zip file.<br /></span> " ;
        }
        else{
            echo"<span style='color:red;'>{$path} location could not be added to zip<br /></span>";
        }
    }
    $zip->close();
    ?>

Bu, dosyaları
zipleyin

0

Bu, sorununuzu çözecektir. Lütfen dene.

$zip = new ZipArchive;
$zip->open('testPDFZip.zip', ZipArchive::CREATE);
foreach (glob(APPLICATION_PATH."pages/recruitment/uploads/test_pdf_folder/*") as $file) {
    $new_filename = end(explode("/",$file));
    $zip->addFile($file,"emp/".$new_filename);
}           
$zip->close();

0

Bu yazıyı okuyan ve dosyaları mutlak yollarıyla sıkıştırmayan addFromString yerine addFile kullanarak neden sıkıştıracaklarını arayanlar için (sadece dosyaları sıkıştırır ve başka hiçbir şey yapmaz), soruma ve cevabıma buradan bakın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.