1
resposta

[Dúvida] Dúvida na Hora de Extrair e renomear arquivos em PHP


<html>
<body>

    <?php

    require __DIR__."/vendor/autoload.php";
    use \App\File\Upload;

    //Se Existir este índice, Acesse o Arquivo

    if(isset($_FILES['arquivo'])){

        //INSTANCIA DE UPLOAD
        $obUpload = new Upload($_FILES['arquivo']);

        // //ALTERA NOME DO ARQUIVO
        // $obUpload->setName($name.date("d-m-Y"));

        //MOVE OS ARQUIVOS DE UPLOAD
        $sucesso = $obUpload->upload(__DIR__."/files",false);
        if($sucesso){
            echo "Arquivo <strong>".$obUpload->getBasename()."</strong> enviado com sucesso!";
            exit;
        }
        die ("Problemas ao enviar o arquivo!");
        }



    include __DIR__."/includes/formulario.php";
    // include __DIR__."/includes/extrair.php";
    require __DIR__."/vendor/autoload.php";
    use \includes\Extract;
?>
</body>
</html>



<?php 

namespace App\File;

class Upload{
    /**Nome do ARQUIVo (sem extensão) 
     * @var string*/
    private $name;

    /**Extensão do ARQUIVo (sem ponto) 
     * @var string*/
    private $extension;

    /**Tipo do Arquivo 
     * @var string*/
    private $type;

    /**Nome temporario do Arquivo 
     * @var string*/
    private $tmpname;

    /**Código de erro do upload 
     * @var integer*/
    private $error;

    /**Tamanho do arquivo 
     * @var integer*/
    private $size;

    /**Contador de duplicação de arquivo 
     * @var integer*/
    private $duplicates = 0;

    /**Construtor da Classe 
     * @param array $file $_FILES[campo]*/

    public function __construct($file){
        $this->type = $file["type"];
        $this->tempname = $file["tmp_name"];
        $this->error = $file["error"];
        $this->size = $file["size"];

        $info = pathinfo($file["name"]);
        $this->name = $info["filename"];
        $this->extension = $info["extension"];
    }

    /**Método que altera nome do arquivo
     * @var string*/

    // public function setName($name){
    //     $this->name = $name;
    // }

    /**Método  responsavel por retornar o nome do arquivo com sua extensão
     * @return sting
     */
    public function getBaseName(){
        //VALIDA EXTENSÃO
        $extension = strlen($this->extension) ? ".".$this->extension : "";

        //VALIDA DUPLICAÇÃO
        $duplicates = $this->duplicates > 0 ? date("d-m-Y")."-".$this->duplicates : "";

        //RETORNA NOME COMPLETO
        return $this->name.$duplicates.$extension;

    }
    //MÉTODO RESPONSÁVEL POR OBTER O POSSÍVEL NOME DO ARQUIVO
    private function getPossibleBaseName($dir, $overwrite){
        //SOBRESCREVER ARQUIVO
        if($overwrite) return $this->getBaseName();

        //NÃO PODE SOBRESCREVER ARQUIVO
        $basename = $this->getBaseName();

        //VERIFICAR DUPLICAÇÃO
        if (!file_exists($dir."/".$basename)){
            return $basename;
        }

        //INCREMENTAR DUPLICAÇÕES
        $this->duplicates++;

        //RETORNA O PRÓPIO MÉTODO
        return $this->getPossibleBaseName($dir,$overwrite);
    }

    /**Método para mover arquivo de upload 
     * @param string
     * @return boolean
     */
    public function upload($dir, $overwrite = true){
        //Verificar ERRO
        if($this->error != 0) return false;

        $path = $dir."/".$this->getPossibleBaseName($dir, $overwrite);

        return move_uploaded_file($this->tempname,$path);
    }
}

<?php

namespace includes;

class Extract{

private $zip_path;
private $extract_path;
private $zip;
private $res;

public function __construct(){
    if ($_SERVER['REQUEST_METHOD']=="POST" and isset($_POST['someAction'])){
        renameExtract();
    }
    $this->zip_path = "files\ESTRUTURA CBO.ZIP";
    $this->extract_path = "files";
    $this->zip = new ZipArchive;
    $this->res = $zip->open($zip_path);

    function renameExtract(){
        for ($i = 0; $i < $zip->numFiles; $i++) {
            $filename = $zip->getNameIndex($i);
            $zip->renameName($filename,date('Ymd').$filename);
            echo 'entrou aqui'.$i;
        }

    // Abertura do arquivo zip
    if ($zip->open($zip_path, ZipArchive :: CREATE) === TRUE) {

        // Extração de todos os arquivos do arquivo zip
    $zip->extractTo($extract_path);
        // Fechamento do arquivo zip
    $zip->close();
        echo 'Arquivos extraídos com sucesso';
    } else {
        echo 'Falha ao abrir arquivo zip';
    }
        }
}


}

?>
</body>
</html>


1 resposta

Olá, Robson. Eu não entendi muito bem a sua dúvida, e qual a parte do código que está com dúvida, e se está acontecendo algo de errado.

Fico no aguardo :)