За последние 24 часа нас посетили 22092 программиста и 1160 роботов. Сейчас ищут 825 программистов ...

ZipArchive и renameIndex

Тема в разделе "Вопросы от блондинок", создана пользователем Dmitriy A. Arteshuk, 30 янв 2018.

  1. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    Что то я не вьеду как это работает (((

    PHP:
    1. $zip = new ZipArchive;
    2. $res = $zip->open('1.zip'); // в архиве лежит файлик 1.txt
    3. $zip->renameIndex(0,'2.txt');
    4. var_dump($zip->extractTo('path/')); // FALSE!!!
    5. $zip->close();
    6. // НО если сделать так:
    7. $zip = new ZipArchive;
    8. $res = $zip->open('1.zip'); // в архиве лежит файлик 1.txt
    9. $zip->renameIndex(0,'2.txt');
    10. $zip->close();
    11. $zip = new ZipArchive;
    12. $res = $zip->open('1.zip');
    13. var_dump($zip->extractTo('path/')); // TRUE!!!
    14. $zip->close();
    Это так и должно быть или я чего не догоняю? Как сохранить файлик из архива с нужным мне именем?
    Я понимаю что можно переименовать и после распаковки...но все же....
     
  2. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    PHP:
    1. $zip = new ZipArchive;
    2. if ($zip->open('ar.zip')) {
    3.     $zip->renameName($zip->getNameIndex(0), '1.txt');
    4.     $zip->extractTo('download/');
    5.     $zip->close();
    6. } else {
    7.     echo 'Что то пошло не так';
    8. }
     
  3. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    @alexblack спасибо...но то же самое (

    если после переименования закрыть архив и открыть по новой, все работает, БЕЗ закрытия - нет
     
    #3 Dmitriy A. Arteshuk, 30 янв 2018
    Последнее редактирование: 30 янв 2018
  4. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Да,действительно, не внимательно посмотрел,тоже отработало со 2 раза. Еще один вариант:

    PHP:
    1. <?php
    2. $zip = new ZipArchive;
    3. $zipLocation = 'C:\ospanel\domains\localhost\ar.zip';
    4. $zip->open($zipLocation);
    5. $filename = $zip->getNameIndex(0);
    6. copy("zip://".$zipLocation."#".$filename, "download/newname.txt");                  
    7. $zip->close();                  
     
  5. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    denis01, artoodetoo и alexblack нравится это.