«
«
Kullanıcı Masası
Hoşgeldin Ziyaretçi

Kategoriler
Dosya ve Klasörleri Zip İle Sıkıştırma - PHP

PHP ZipArchive Sınıfı



PHP'nin içerisinde hazır gelen ZipArchive sınıfını kullanarak kolayca istediğiniz dosya ve klasörleri sıkıştırabilir ve istediğiniz bir konuma kolayca kaydedebilirsiniz. Açıkçası hazırlamış olduğum ve sizlerle paylaştığım bu fonksiyonu ben Windows ortamında kullanıyorum ve hem script dosyalarını hemde veritabanı dosyalarını sıkıştırarak iki farklı yere yedekleme yapıyorum. Yedekleme yaptığım dizinlerden biri bilgisayarımdaki farklı bir disk, diğeri ise Google Drive klasörü, Google Drive klasörüne yedekleme yaparak bulut teknolojisi'nden de yararlanmış oluyorum. Bu fonksiyonu Linux sunucunuzda da kullanabilirsiniz, ancak veritabanı dosyalarını saf haliyle sıkıştıramayabilirsiniz. Eğer bu fonksiyonu Linux ortamında kullanmayı planlıyor ve veritabanınıda sıkıştırarak yedeklemek istiyorsanız öncelikle veritabanını ".sql" uzantılı bir dosya olarak yedeklemeniz gerekmekte.


Hazırlamış olduğum bu fonksiyonun pek çok özelliği bulunuyor, bunlardan biri istediğiniz sayıda farklı dizini sıkıştırarak her birini birden çok yere kaydedebilirsiniz. Bir diğer özelliğide sıkıştırmış olduğunuz dosyaları şifreleyebilmeniz, ancak bu şifreleme için minimum PHP 7.2 sürümü kullanıyor olmanız gerekiyor.

Sıkıştırma İşlemi Yapan PHP Fonksiyonu



Kod Çizelgesi:[Hepsini Seç] 

ini_set('max_execution_time'9999);
ini_set('memory_limit','2048M');

define('YEDEKLEME_SERVISI'true);

/*** ################################################################################ ***/

function diziAra($aranan$aranan_yer)
{
    foreach ($aranan_yer as $deger)
    {
        if (($deger === $aranan)) return true;
        elseif(is_array($deger))
        {
            $sonuc diziAra($aranan$deger);
            if($sonuc == true) return true;
        }
    }
    return false;
}

/*** ################################################################################ ***/

function NTGYedeklemeServisi($yedeklenecekler)
{
    $input = array();
    $say 1;
    
    if (extension_loaded('zip'))
    {
        if((is_array($yedeklenecekler)) AND (count($yedeklenecekler) > 0))
        {
            foreach($yedeklenecekler as $yedeklenecek)
            {
                echo '<hr /><p>'.$yedeklenecek['dizin'].'</p>';
            
                if (file_exists($yedeklenecek['dizin']))
                {
                    $dizin realpath($yedeklenecek['dizin']);
                    $zip = new ZipArchive();
                    
                    if((is_array($yedeklenecek['yedekle'])) AND (count($yedeklenecek['yedekle']) > 0))
                    {
                        foreach($yedeklenecek['yedekle'] as $zipDosyasi)
                        {
                            if(file_exists($zipDosyasi)) unlink($zipDosyasi);
                            
                            if ($zip->open($zipDosyasiZIPARCHIVE::CREATE))
                            {
                                if (is_dir($dizin))
                                {
                                    $dosyalar = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dizin), RecursiveIteratorIterator::SELF_FIRST);
                                    foreach ($dosyalar as $dosya)
                                    {
                                        $dosya realpath($dosya);
                                        if (is_file($dosya))
                                        {
                                            if((realpath($_SERVER['SCRIPT_FILENAME']) != $dosya) AND (!diziAra($dosya$yedeklenecekler)))
                                            {
                                                echo '<p style="padding:0; margin:0;"><strong>Yedekleniyor ['.$say.'] : </strong>'.$dosya.'</p>';
                                                $dosyaEkle = @trim(str_replace('\\''/'end(explode(end(explode('\\'$dizin)), $dosya))), '/');
                                                $zip->setPassword($yedeklenecek['sifre']);
                                                $zip->addFile($dosya$dosyaEkle);
                                                if (version_compare(phpversion(), '7.1''>')) $zip->setEncryptionIndex($dosyaEkleZipArchive::EM_AES_256);
                                                
                                                $say++;
                                            }
                                        }
                                    }
                                }
                                
                                if($yedeklenecek['input'] == true$input[] = $zipDosyasi;
                            }
                        }
                    }
                    $zip->close();
                }
            }
        }
    }
    echo '<hr />';
    
    if(count($input) > 0) foreach($input as $inputDosya) if(file_exists($inputDosya)) echo '<p><input value="'.$inputDosya.'" style="width:500px;" /></p>';
    
    echo '<hr /><p>Yedekleme Bitti...<p><hr />';
}


Kullanım şekli:

Kod Çizelgesi:[Hepsini Seç] 

NTGYedeklemeServisi(array(
    array(
        'dizin' => 'C:\AppServ\MySQL\data\veritabani',
        'yedekle' => array(
            'A:\NTGYedek\veritabani.zip',
            'D:\veritabani.zip',
            'C:\GoogleDrive\veritabani.zip' 
        ),
        'input' => true,
        'sifre' => '123456'
    ),
    array(
        'dizin' => 'C:\AppServ\www\site',
        'yedekle' => array(
            'A:\NTGYedek\site.zip',
            'D:\site.zip',
            'C:\GoogleDrive\site.zip' 
        ),
        'input' => false,
        'sifre' => '123456'
    )
));
Yorumlar  (Toplam: 0) Sıralama:
Henüz yorum yapılmamış, ilk yorumu siz yazın.
Yorum Yaz
Onay Kodu .
 
Yücel KAHRAMAN