Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

zip dosyanın ana dizin adını öğrenmek

Konu, 'PHP' kısmında Adem GENÇ tarafından paylaşıldı.

  1. Adem GENÇ

    Adem GENÇ Daimi Üye

    Kayıt:
    11 Kasım 2012
    Mesajlar:
    872
    Beğenilen Mesajlar:
    5
    Meslek:
    Bina Elektronik Sistemleri
    Şehir:
    İstanbul
    Merhaba,

    PHP ile sunucuda zip yapılan dosyayı yine php ile açarken sunucuda aynı dizin olacağından uyarı vermek için "dizinadi" adında dizin mevcut üzerine yazmak istediğinizden emin misiniz demek için zip dosyanın dizin adını nasıl alırım?

    PHP:
    $za = new ZipArchive();

    $za->open('./2018-11-07-08-24-05_dizin_adi_burasi_gercek_dizin_adi_olmayabilir.zip'); 

           
    $dizinarr $za->statIndex(1);
           
    $dizinname $dizinarr["name"];
           
    $namedizin dirname($dizinname);
           
    $new_filename explode("/"$namedizin);
           
    $kokdizinadi end($new_filename);
    Böyle birşey deneme yanılma ile yaptım ama 22 deneme zipli zinde 4 tanesi ikinci dizin adını verdi yani anadizin/iknicidizin demekki bu sağlıklı bir yöntem değil

    Array ( [0] => .. [1] => [2] => Pager ) burada key 2 de görünüyor $new_filename[2] yapsak her yerde geçerli olurmu?
     
  2. Adem GENÇ

    Adem GENÇ Daimi Üye

    Kayıt:
    11 Kasım 2012
    Mesajlar:
    872
    Beğenilen Mesajlar:
    5
    Meslek:
    Bina Elektronik Sistemleri
    Şehir:
    İstanbul
    Bu sorunu halletim, belki bir başkasına lazım olur diye paylaşayım tabi benim gibi acemiler için geçerli
    PHP bilmediğim için nette bulduğum hazır kodları kullanmıştım
    Bulduğum bir zip yapma kodu ..\\dizin başına ekliyor hatta ..\\dizin\dizin\dizin\zipyapılan bu dizin zip yaparken bile tam kök dizinden beri yolu kaydediyordu bu kod işimi görmedi.
    Sonra aşağıdaki kodu buldum bu kod gösterdiğin dizin değil dizin içindekileri zip yapıyordu bana gösterdiğim dizin zip yapacaktı deneme yanılma ile küçük değişiklik yaptım ve tam istediğim oldu
    Dizin adını almak için yukarıdaki kodu kullanarak $kokdizinadi = end($new_filename); yerine $kokdizinadi = $new_filename[0]; bununla değiştirdik mi tamamdır.
    Ama ben böyle yapmadım
    Zip yaparken yorum ekleme alanına dizin adını ekledim $zip->setArchiveComment($_POST['klasoradi']);
    Sonra
    PHP:
           $res $za->open($zipdosya);
           
           
    // Zip içindeki yoruma yazılan dizin adını alıyor
           
    if ($res === TRUE) {
               
    $kokdizinadi $za->comment;
           }
    Yorumdan dizin adını aldım

    PHP:
    //Bununla dizin kaç karakter olduğunu belirledim
    $foldernumber strlen(‘adem’);
    // aşağıdaki satırıda ekledik tam istediğim gibi oldu
    $relativePath substr($filePathstrlen($rootPath) - $foldernumber);
    PHP:
    // 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($filePathstrlen($rootPath) + 1);

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

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