Php zip file name

ZIP в PHP (ZipArchive)

Класс ZipArchive позволяет быстро и удобно работать с ZIP-архивам, рассмотрим основные возможности класса.

Добавление файлов в архив

В примере используются константы:

  • ZipArchive::CREATE – создавать архив, если он не существует
  • ZipArchive::OVERWRITE – если архив существует, то игнорировать текущее его содержимое т.е. работать как с пустым архивом.
$zip = new ZipArchive(); $zip->open(__DIR__ . '/archive.zip', ZipArchive::CREATE|ZipArchive::OVERWRITE); $zip->addFile(__DIR__ . '/image1.jpg', 'image1.jpg'); $zip->addFile(__DIR__ . '/image2.jpg', 'image2.jpg'); $zip->close();

Если файл необходимо поместить в директорию, то предварительно не нужно создавать пустую папку. Можно просто указать путь и имя файла, например «src»:

$zip->addFile(__DIR__ . '/image1.jpg', 'src/image1.jpg'); $zip->addFile(__DIR__ . '/image2.jpg', 'src/image2.jpg');

Если текстовой файл генерится прямо в скрипте, то удобней скинуть его в архив методом addFromString() .

$contents = 'Содержание файла file.log'; $zip = new ZipArchive(); $zip->open(__DIR__ . '/archive.zip', ZipArchive::CREATE|ZipArchive::OVERWRITE); $zip->addFromString('file.log', $contents); $zip->close();

Заархивировать директорию с содержимым

Сделать архив сайта можно с помощью рекурсивной функции, функция обойдет все файлы в директориях и добавит их в архив.

function addFileRecursion($zip, $dir, $start = '') < if (empty($start)) < $start = $dir; >if ($objs = glob($dir . '/*')) < foreach($objs as $obj) < if (is_dir($obj)) < addFileRecursion($zip, $obj, $start); >else < $zip->addFile($obj, str_replace(dirname($start) . '/', '', $obj)); > > > > $zip = new ZipArchive(); $zip->open(__DIR__ . '/archive.zip', ZipArchive::CREATE|ZipArchive::OVERWRITE); addFileRecursion($zip, __DIR__ . '/test'); $zip->close();

Переименовать файл

$zip = new ZipArchive(); $zip->open(__DIR__ . '/archive.zip'); $zip->renameName('image2.jpg', 'images.jpg'); $zip->close();

Если файл лежит в папке

$zip->renameName('src/image2.jpg', 'src/images.jpg');

Удалить файл из архива

$zip = new ZipArchive(); $zip->open(__DIR__ . '/archive.zip'); $zip->deleteName('image2.jpg'); $zip->close();

Если файл лежит в папке

$zip->deleteName('src/image2.jpg');

Список файлов в архиве

$zip = new ZipArchive(); $zip->open(__DIR__ . '/archive.zip'); $i = 0; $list = array(); while($name = $zip->getNameIndex($i)) < $list[$i] = $name; $i++; >print_r($list); $zip->close();
Array ( [0] => src/image1.jpg [1] => src/image2.jpg [2] => file.log )

Извлечь весь архив

$zip = new ZipArchive(); $zip->open(__DIR__ . '/archive.zip'); $zip->extractTo(__DIR__); $zip->close();

Извлечь определенные файлы

$zip = new ZipArchive(); $zip->open(__DIR__ . '/archive.zip'); $zip->extractTo(__DIR__, array('src/image1.jpg', 'src/image2.jpg')); $zip->close();

Извлечь файл в поток

Данный метод удобен если требуется только прочитать содержимое файла.

$zip = new ZipArchive(); $zip->open(__DIR__ . '/archive.zip'); $contents = ''; $fp = $zip->getStream('file.log'); while (!feof($fp)) < $contents .= fread($fp, 2); >fclose($fp); echo $contents; $zip->close();

Источник

Читайте также:  Reading mat files in python

ZipArchive::getNameIndex

Если флаг установлен в ZipArchive::FL_UNCHANGED , возвращается оригинальное неизмененное имя.

Возвращаемые значения

Возвращает имя при успехе или false в случае возникновения ошибки.

Примеры

Пример #1 Пример использования ZipArchive::getnameindex()

if ( $zip -> open ( ‘test.zip’ ) == TRUE ) for ( $i = 0 ; $i < $zip ->numFiles ; $i ++) $filename = $zip -> getNameIndex ( $i );
// .
>
>
?>

User Contributed Notes 1 note

I couldn’t find any how-to example for getting the filenames, so I made an easy one.

Here’s an example how to list all filenames from a zip-archive:

$zip = new ZipArchive ;
if ( $zip -> open ( ‘items.zip’ ))
<
for( $i = 0 ; $i < $zip ->numFiles ; $i ++)
<
echo ‘Filename: ‘ . $zip -> getNameIndex ( $i ) . ‘
‘ ;
>
>
else
<
echo ‘Error reading zip-archive!’ ;
>
?>

Hope it helps.

  • ZipArchive
    • addEmptyDir
    • addFile
    • addFromString
    • addGlob
    • addPattern
    • clearError
    • close
    • count
    • deleteIndex
    • deleteName
    • extractTo
    • getArchiveComment
    • getArchiveFlag
    • getCommentIndex
    • getCommentName
    • getExternalAttributesIndex
    • getExternalAttributesName
    • getFromIndex
    • getFromName
    • getNameIndex
    • getStatusString
    • getStream
    • getStreamIndex
    • getStreamName
    • isCompressionMethodSupported
    • isEncryptionMethodSupported
    • locateName
    • open
    • registerCancelCallback
    • registerProgressCallback
    • renameIndex
    • renameName
    • replaceFile
    • setArchiveComment
    • setArchiveFlag
    • setCommentIndex
    • setCommentName
    • setCompressionIndex
    • setCompressionName
    • setEncryptionIndex
    • setEncryptionName
    • setExternalAttributesIndex
    • setExternalAttributesName
    • setMtimeIndex
    • setMtimeName
    • setPassword
    • statIndex
    • statName
    • unchangeAll
    • unchangeArchive
    • unchangeIndex
    • unchangeName

    Источник

    zip_entry_name

    This function has been DEPRECATED as of PHP 8.0.0. Relying on this function is highly discouraged.

    Description

    Returns the name of the specified directory entry.

    Parameters

    A directory entry returned by zip_read() .

    Return Values

    The name of the directory entry, or false on failure.

    Changelog

    Version Description
    8.0.0 This function is deprecated in favor of the Object API, see ZipArchive::statIndex() .

    See Also

    User Contributed Notes 2 notes

    If you want to get the real name of the file without the directory name, you can just use the function basename() as the follow:

    $zip_dir = «./import/»;
    $zip = zip_open($zip_dir.»import.zip»);
    if ($zip) while ($zip_entry = zip_read($zip))

    $file = basename(zip_entry_name($zip_entry));
    $fp = fopen($zip_dir.basename($file), «w+»);

    if (zip_entry_open($zip, $zip_entry, «r»)) $buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
    zip_entry_close($zip_entry);
    >

    echo «The file «.$file.» was extracted to dir «.$zip_dir.»\n
    «;
    >
    zip_close($zip);
    >
    ?>

    Thefore you can extract files without concern with the directory that is set inside the zip source.

    Remember to give write permission (w) on that directory.

    Источник

Оцените статью