Jump to content
jeffersonmachado

extractto não funciona

Recommended Posts

Olá,

 

Alguém sabe me dizer porque com o código abaixo o extractto não grava/descompacta o arquivo no diretório?

 

Grato,

 

 

<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache'); 


function send_message($id, $message, $progress) {
    $d = array('message' => $message , 'progress' => $progress);
      
    echo "id: $id" . PHP_EOL;
    echo "data: " . json_encode($d) . PHP_EOL;
    echo PHP_EOL;
    //echo str_repeat( ' ', 4096); 
      
    ob_flush();
    flush();
}

$path = 'tmp/ripabx_update.zip';

$versao = file_get_contents("https://repo.results.com.br/repo/ripabx/update/version");
$zip = new ZipArchive;
send_message(10,'START', 'Process complete');
if ($zip->open($path) === true) {
      if ($zip->setPassword($versao)){
          send_message(10,"File $path Num:$zip->numFiles Sta:$zip->status Ver:$versao", "Process complete");
          $previuosProgress = 0;
$myfile = fopen("testfile.txt", "w");
          for($i = 0; $i < $zip->numFiles; $i++) {
             if (file_exists($zip->getNameIndex($i))) {
                unlink($zip->getNameIndex($i));
             }
             if ($zip->extractTo('..', array($zip->getNameIndex($i))) === true) {
                $extrac = "Funcionou";
             } else {
                $extrac = "Não Funcionou ";
             }
             $progress = round($i / $zip->numFiles * 100);                       
             if ($progress > $previuosProgress ) {
                $previuosProgress = $progress;
                send_message($i, 'on unzip ' . $zip->getNameIndex($i) . ' Ret:' . $extrac, $progress); 
             }
          }
          $zip->close();

          send_message(10,'CLOSE', 'Process complete');
       } else {
           send_message(10,'CLOSE', 'Password failed');
       }
} else {
     send_message(10,'CLOSE', 'Open failed');
}
?>
 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By führ
      Olá
      tenho uma aplicação de controle onde envio o arquivo txt zipado para leitura e insert no bd, acontece q não estou conseguindo inserir todos as linhas do arquivo, gravando somente uma (a primeira), não consigo ver onde estou errando.
      Adaptei de uma aplicação onde importo um txt, ignorando o cabeçalho e linhas em branco se existirem, isto também não estou conseguindo no arquivo zipado,
      Se puderem me ajudar, agradeço.
      segue código
       
      ///////////////////////////////////////// $pathFile = $this->Ini->path_doc . "/" . {arquivo}; $zip = zip_open($pathFile); if ($zip) { while ($zip_entry = zip_read($zip)) { echo "<p>"; echo "Name: " . zip_entry_name($zip_entry) . "<br />"; if (zip_entry_open($zip, $zip_entry)) { $contents = zip_entry_read($zip_entry); echo "File Contents:<br/>"; echo $contents; //if(strlen(trim($zip_entry)) >= 0) { $dados = explode(";", $contents, 1028); $campo1 = str_replace("'","",$dados[0]); //RETIRA O ' DA COLUNA $campo2 = str_replace("'","",$dados[1]); $campo3 = str_replace("'","",$dados[2]); $campo4 = str_replace("'","",$dados[3]); $campo5 = str_replace("'","",$dados[4]); $campo6 = str_replace("'","",$dados[5]); $campo7 = str_replace("'","",$dados[6]); $campo8 = str_replace("'","",$dados[7]); $campo9 = str_replace("'","",$dados[8]); $campo10 = str_replace("'","",$dados[9]); $campo11 = str_replace("'","",$dados[10]); $campo12 = str_replace("'","",$dados[11]); $campo13 = str_replace("'","",$dados[12]); $campo14 = str_replace("'","",$dados[13]); $campo15 = str_replace("'","",$dados[14]); $campo16 = str_replace("'","",$dados[15]); $campo17 = str_replace("'","",$dados[16]); $campo18 = str_replace("'","",$dados[17]); $campo19 = str_replace("'","",$dados[18]); $data = $campo9; $dia = substr($data, 0, 2); $mes = substr($data, 3, 2); $ano = substr($data, 6, 4); $campo9_gravar = $ano."-".$mes."-".$dia; $valor_bruto = floatval(str_replace(',', '.', str_replace('.', '', $campo6))); $total_nfe = floatval(str_replace(',', '.', str_replace('.', '', $campo17))); $quantidade = floatval(str_replace(',', '.', str_replace('.', '', $campo4))); echo $inserir = sc_exec_sql("INSERT into anual(ncm, descricao, cfop, quantidade, unidade, valor_bruto, opracao_nfe, situacao_nfe, data_nfe, ie_emitente, uf_emitente, ie_destinatario, uf_destino, modelo_df, serie_nfe, nfe, total_nfe, situacao_aim, chave_acesso, ano, cliente_id, ncm2, data_lancamento) VALUES ('$campo1', '$campo2', '$campo3', '$quantidade', '$campo5', '$valor_bruto', '$campo7', '$campo8', '$campo9_gravar', '$campo10', '$campo11', '$campo12', '$campo13', '$campo14', '$campo15', '$campo16', '$total_nfe', '$campo18', '$campo19','{ano}', '{cliente}','$campo1', '{data_lancamento}')"); //INSERE CADA LINHA } // FECHA REMOÇÃO DA LINHA EM BRANCO //} zip_entry_close($zip_entry); }  
    • By Elisandro Vieira
      Bom dia, tenho um diretório no meu site com varias pasta onde cada uma contém arquivos, gostaria de saber como faço para que quando clicar na pasta ela já baixar em formato zip com todos os arquivos dentro.
      Segue link da raiz do meu site onde contem as pastas com os arquivos http://brasiltatico.net/cod4/usermaps/
       
      att,
      Elisandro
    • By LuyZ
      Bom dia,
       
      Estou com um problema em mãos uma migração de servidor é necessária o meu cliente tem um servidor com SATA com uso de 200 Gigas e 800 Gigas Livres, sendo que existem muitos arquivos pequenos que é obrigatório existirem, ou seja o problema não é espaço e sim a velocidade de compressão, tentei comprimir em .tar.gz pela noite dentro e apenas consegui 2,5 Gigas como é obvio parei o processo,
       
      Assim gostaria de saber qual método em termos de rapidez deve ser usado neste caso, o servidor roda CentOS 7
    • By Vinicius P da Silva
      Olá galera, como vocês estão?
      Sou estagiário em programação web, tenho apenas 6 meses de experiencia em php, no meu estágio, estamos fazendo um trabalho de monitoramento de rede, usando um software, Fiddler, ele me gera um zip, dentro dele tem vários arquivos que são gerados pelo programa com dados estatísticos da rede. Resumindo tudo isso, ele gera três tipos de arquivos, *.txt, *.xml, *.htm.
      Para trabalhar com eles criei scripts, que abrem o zip e leia o conteúdo dos arquivos e mandem para um banco de dados, desses três já consegui dois, txt e xml, estou preso no htm, o código padrão que uso para abrir os zips e tratar os arquivos:
      <?php if (!extension_loaded('zip')) { echo ("Seu arquivo php.ini não está habilitado para esta função!"); } $dir_origem = 'C:\Users\vinicius.psilva\Documents\Fiddler2\Captures'; //$arquivos_zip = glob($dir_origem."\*.zip") foreach (glob($dir_origem."\*.zip") as $arquivo_zip ) { echo "$arquivo_zip" . "<br>"; $zip = new ZipArchive(); if($zip ->open($arquivo_zip) == true){ echo "Aberto" . "<br/>"; $ }else{ echo "default"; return 0; } } } } } ?> Queria ajuda para poder trabalhar com o htm: Passo a passo do que terei que fazer: 1 - Juntar vários zips em uma variável, abrir eles e ler o seu conteúdo; 2 - Pegar todos os arquivo htm, fazer a leitura deles. 3 - Com regex, pegar somente o texto escolhido 4 - Mandar esses dados para um banco de dados Com os outros arquivos eu consegui, um dos scripts utilizados: function getTxt($dirOrig){ $date = date('d-m-Y'); $zip = new ZipArchive(); $arqZips = glob($dirOrig."\*.zip"); foreach($arqZips as $arqZip){ echo $arqZip.'<br/>'; $er = '/[/W/w]*monitoramento(.+)10(.+)_(.+). ?/'; preg_match($er,$arqZip); $txt_name=substr($arqZip,0); $posiçao = strpos($txt_name, "monitoramento"); $name_txt=substr($arqZip,$posiçao); //print_r() ; echo "$name_txt". "<br/>"; echo '<br/>'; $count_c = 1; echo $arqZip . '<br/>'; if ($zip -> open($arqZip) == TRUE) { //ao abrir o próximo arquivo inicializa o contador em zero $total_c=0; // pega o total de xml dentro do zip } echo '<p>'.'<h5>'."TXT Arqs *_s.txt ".'<h5/>'.'<p/>'.'<br/>'; for ($i = 0; $i < $zip->numFiles; $i++) { $filename = $zip->getNameIndex($i); if ($a1 = substr($filename,-6) == "_c.txt"){ $total_c++; } } echo 'O numero de arquivos'.': '."$total_c" . "<br>"; // Define o numero de zeros a esquerda if ($total_c<=9){ $numero_de_zeros = 1; } elseif ($total_c>=10 && $total_c<=99){ $numero_de_zeros = 2; } elseif ($total_c>=100 && $total_c<=999){ $numero_de_zeros = 3; } elseif ($total_c>=1000 && $total_c<=9999){ $numero_de_zeros = 4; } elseif ($total_c>=10000 && $total_c<=99999){ $numero_de_zeros = 5; } while ($count_c <= $total_c) { $file_arq_c = "raw/" . str_pad($count_c, $numero_de_zeros, "0", STR_PAD_LEFT). "_c.txt".'<br/>'; $file_arq_res_c = $zip->getStream($file_arq_c); if ( $file_arq_res_c ) { $texto = ''; while (!feof($file_arq_res_c)) { //realiza o teste para saber se o programa chegou ao final $linha = fgets($file_arq_res_c, 5000); // Linha responsavel por ler todas as linhas do arq e armazenar em strings dentro da variavel $texto = $texto . $linha; } echo $file_arq_c; fclose( $file_arq_res_c); if (ereg("^CONN",$texto)==true){ $connect = '/^CONNECT (?P<connect>[\S]*)/'; preg_match($connect, $texto, $matches); $connect_db = $matches ['connect']; echo "$connect_db" . "<br/>"; $host = '/[\w\W] *Host: (?P<host>[\S]*)/'; preg_match($host, $texto, $matches); $host_db = $matches ['host']; echo "$host_db" . "<br/>"; $proxy = '/[\w\W]*Proxy-Connection: (?P<Proxy_Connection>[\S]*)/'; preg_match($proxy, $texto, $matches); $proxy_db = $matches ['Proxy_Connection']; echo "$proxy_db" . "<br/>"; $user = '/[\w\W] *User-Agent: (?P<User_Agent>[\S]*)/'; preg_match($user, $texto, $matches); $user_db = $matches ['User_Agent']; echo "$user_db" . "<br/>"; $version = '/[\w\W] *Version: (?P<Version>[\S]*)/'; preg_match($version, $texto, $matches); $version_db = $matches ['Version']; echo "$version_db" . "<br/>"; $extensions = '/^[\w\W]Random: (?P<extensions>[\s]*)Ciphers:/'; preg_match($extensions, $texto, $matches); $extensions_db = $matches ['extensions']; var_dump ($extensions_db); return; return; if (mysql_query("INSERT INTO dados (id, get,nome_arq, host, accept, user_agent, referer, cookie, date) VALUES ('NULL' ,'$connect_db','$filename', '$host_db','$proxy_db','$user_db','$version_db','$extensions_db', '$date' '')")) { echo "<p>"; printf(" Row inserted : %d .\n\n\n\n", $db); echo "<br/>"; echo '<p/>'; } else { echo"<br/>"."<br/>"."Nao possivel o envio para o banco, pois foi encontrado um erro: " . "<br/>" . mysql_error().'<br/>'; } mysql_close(); } else{ $p_linha = '/[\w\W]*GET (?P<p_linha>[\S]*)/'; preg_replace($p_linha, $texto, $matches); $get_db = $matches ['p_linha']; echo "$get_db" . "<br/>"; $host = '/[\w\W]*Host: (?P<host>[\S]*)/'; preg_match($host, $texto, $matches); $host_db = $matches ['host']; $accept = '/[\w\W]*Accept: (?P<accept>[\S]*)/'; preg_match($accept, $texto, $matches); $accept_db = $matches ['accept']; $user_agent = '/[\w\W]*User-Agent: (?P<user_agent>[\S]*)/'; preg_match($user_agent, $texto, $matches); $user_agent_db = $matches ['user_agent']; $referer = '/[\w\W]*Referer: (?P<referer>[\S])*/'; preg_match($referer, $texto, $matches); $referer_db = $matches ['referer']; $cookie = '/[\w\W]*Cookie: (?P<cookie>[\s]*)/'; preg_match($cookie, $texto, $matches); $cookie_db = $matches ['cookie']; if (mysql_query("INSERT INTO dados (id, get,nome_arq, host, accept, user_agent, referer, cookie, date) VALUES ('NULL' ,'$get_db','$name_txt', '$host_db','$accept_db','$user_agent_db','$referer_db','$cookie_db', '$date' '')")) { echo "<p>"; printf(" Row inserted : %d .\n\n\n\n", $db); echo "<br/>"; echo '<p/>'; } else { echo"<br/>"."<br/>"."desiste disso " . "<br/>" . mysql_error(); } mysql_close(); } } $count_c++; echo "Fim"; echo "<br/>"; } } } } Seguindo a lógica de cima, pretendo fazer o restante. Agradeço a Ajuda
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.