I cannot create zip in Debian

Asked

Viewed 57 times

0

I can’t create a zip in Debian even with permission 777 folder, and the worst is that it returns no error.

Code I use to create zip:

    function Compress($source_path, $chave)
    {
        // Normaliza o caminho do diretório a ser compactado
        $source_path = realpath($source_path);

        // Caminho com nome completo do arquivo compactado
        // Nesse exemplo, será criado no mesmo diretório de onde está executando o script
        $zip_file = DIR_ARQUIVOS.$chave.'.zip';

        // Inicializa o objeto ZipArchive
        $zip = new ZipArchive();
        $zip->open($zip_file, ZipArchive::CREATE | ZipArchive::OVERWRITE);

        // Iterador de diretório recursivo
        $files = new RecursiveIteratorIterator(
            new RecursiveDirectoryIterator($source_path),
            RecursiveIteratorIterator::LEAVES_ONLY
        );

        foreach ($files as $name => $file) {
            // Pula os diretórios. O motivo é que serão inclusos automaticamente
            if (!$file->isDir()) {
                // Obtém o caminho normalizado da iteração corrente
                $file_path = $file->getRealPath();

                // Obtém o caminho relativo do mesmo.
                $relative_path = substr($file_path, strlen($source_path) + 1);

                // Adiciona-o ao objeto para compressão
                $zip->addFile($file_path, $relative_path);
            }
        }

        // Fecha o objeto. Necessário para gerar o arquivo zip final.
        $zip->close();

        // Retorna o caminho completo do arquivo gerado
        return $zip_file;
    }
  • but generates the zip at the end? same empty?

  • @h3nr1ke No, other than not generating, all code below Compress is not executed.

  • strange, are sure that the call to Compress($source_path, $chave) is being executed, right? if you play a echo in early on, it is visualized?

  • Yes, I do a query before and it works (in addition to all the code you have before), but when it goes after it doesn’t work.

  • one thing I had to do to make it work was to install the sudo apt-get install php7.0-zip and restart php service php7.0-fpm restart to work properly... but other than that good... I tested it on Ubuntu (Debian-like)

1 answer

0

I made a small adjustments to get the directory and it worked normally your code, unless your variable is empty or with a wrong path that is saving the file in a different folder than the one you expect

I created the zip.php file

<?php
function Compress($source_path, $chave)
{
    // Normaliza o caminho do diretório a ser compactado
    $source_path = realpath($source_path);

    // Caminho com nome completo do arquivo compactado
    // Nesse exemplo, será criado no mesmo diretório de onde está executando o script
    //$zip_file = DIR_ARQUIVOS.$chave.'.zip';

    /**
     * essa foi a parte que ajustei, trocar sua CONSTANTE pelo caminho atual do arquivo
     */
    $zip_file = getcwd( )."/".$chave.'.zip';

    // Inicializa o objeto ZipArchive
    $zip = new ZipArchive();
    $zip->open($zip_file, ZipArchive::CREATE | ZipArchive::OVERWRITE);

    // Iterador de diretório recursivo
    $files = new RecursiveIteratorIterator(
        new RecursiveDirectoryIterator($source_path),
        RecursiveIteratorIterator::LEAVES_ONLY
    );

    foreach ($files as $name => $file) {

        // Pula os diretórios. O motivo é que serão inclusos automaticamente
        if (!$file->isDir()) {
            // Obtém o caminho normalizado da iteração corrente
            $file_path = $file->getRealPath();
            // Obtém o caminho relativo do mesmo.
            $relative_path = substr($file_path, strlen($source_path) + 1);

            // Adiciona-o ao objeto para compressão
            $zip->addFile($file_path, $relative_path);
        }
    }
    // Fecha o objeto. Necessário para gerar o arquivo zip final.
    $zip->close();

    // Retorna o caminho completo do arquivo gerado
    return $zip_file;

}

in the test environment, I created a folder called test at the same level as the php file and executed

Compress("teste", "asdfgh");

the result was the asdfgh.zip file on the same level as the php script with the files that were inside the folder

Browser other questions tagged

You are not signed in. Login or sign up in order to post.