Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

D2th3

Zip php 5.2.6 não está funcionando

Recommended Posts

Máquina que eu utilizo e está dando o problema

Athlon XP 2000+ 32 bits

Asus 7v8x-x

Video GForce 5200 128MB

1GB RAM

2 HD 80MB

Windows XP SP4 32 bits

Apache 2

PHP 5.2.6

 

 

Outra Máquina, onde funciona

Athlon XP 2200+ 32bits

Asus 7v600

Video Gforce 4800 64MB

1GB RAM

2 HD 40MB

Windos XP SP4 32 bits

XAMPP PHP 5.2, APACHE 2.2

 

 

Porém eu já instalei o XAMPP na primeira máquina com as mesmas configuraçõe (copiei e colei os httpd.con e php.ini da segunda máquina) e continuou ocorrendo o mosmo problema.

 

Gostaria de testa com GZIP.

Tem como me ajudar fazer aquela função acima para compactar em GZIP?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não ajudou muito... bom testa ai com gzip.

Tem esta função que eu peguei no guia de referência, é só informar o primeiro parâmetro:

 

function gzcompressfile($source, $level=false)
{
	$dest=$source.'.gz';
	$mode='wb'.$level;
	$error=false;
	if($fp_out=gzopen($dest,$mode))
	{
		if($fp_in=fopen($source,'rb'))
		{
			while(!feof($fp_in))
			{
				gzwrite($fp_out,fread($fp_in,1024*512));
			}
			
			fclose($fp_in);
		}
		else
		{
			$error=true;
		}
		
		gzclose($fp_out);
	}
	else
	{
		$error=true;
	}
	
	if($error)
	{
		return false;
	}
	
	return $dest;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Descobri algo!

 

Ele está funcionando perfeitamente. Inclusive no PC que não estava. Observei que quando aparecer Status: 11 ele falha.

Agora quero descobrir por que está dando Status 11.

 

Mais coisas interessantes:

 

Suspeitei do número de Arquivos que estavam sendo compactados.

 

No final do Script

 

echo "Arquivos: " . $zip->numFiles . "\n";

Ele apresenta: 1301

 

Como eu sei que esse número é inviável, inseri $i++, como abaixo:

 

echo $i++ . ": Adding " . $nome_arq . "<br/>";

E foram exibidos 560 linha, ou seja 560 arquivos e não 1301 como o $zip->numFiles diz.

 

Fui mais teimoso.

 

Fui contar a Array arquivo.

 

echo "<h1> Array Arquivos:". count($arquivos) ."</h1>";

E também exibiu 560 elementos dentro da Array.

 

 

E agora?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente, nem imagino. Se funciona em uma máquina, deveria funcionar em outra.

Talvez seja um problema com algum software que existe em uma máquina e na outra não.

Dá pra passar um perfil do software que você tem instalado nas máquinas ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem mais uma coisa para pensar.

Funcionou, em partes.

 

Alterei a função

 

$pasta = "D:/basededados";
//$pasta = "bkp";


$arquivo_zip = "bkp.zip";

$arquivos = array();
$restricao = array(".","..","_notes","_mmServerScripts");


function ZiparBkp($pasta) {
global $arquivos;
global $restricao;

$zip = new ZipArchive();

	if ($in_pasta = opendir($pasta)) {
		while (false !== ($arq = readdir($in_pasta))) {
			if(!in_array($arq, $restricao) && is_file($pasta.'/'.$arq)) {
			//if ($arq != "." && $arq != ".." && is_file($pasta.'/'.$arq)) {
				$arquivos[] = $pasta.'/'.$arq;
			}
			else if (!in_array($arq, $restricao) && is_dir($pasta.'/'.$arq)) {
			//else if ($arq != "." && $arq != ".." && is_dir($pasta.'/'.$arq)) {
				ZiparBkp($pasta.'/'.$arq);
			}
			
			if(count($arquivos) > 100){
			  break;
			}
		
		}
		closedir($in_pasta);
	}
	return $arquivos;
}

ZiparBkp($pasta);

$zip = new ZipArchive();

$zip->open($arquivo_zip, ZipArchive::CREATE);
foreach ($arquivos as $nome_arq) {
	echo $i++ . ": Adding " . $nome_arq . "<br/>";
	$zip->addFile($nome_arq,$nome_arq);
}
echo "<h1> Array Arquivos:". count($arquivos) ."</h1>";

echo "Arquivos: " . $zip->numFiles . "\n";
echo "Status:" . $zip->status . "\n";
$zip->close();

 

Acrescentei dentro do While que quando o arquivo tiver 100 pastas ele para de alimentar a Array.

 

if(count($arquivos) > 100){
			  break;
			}

ASSIM FUNCIONOU.

O $zip->nunFiles ficou igual ao número de linhas e ao número de dados dentro da Array arquivo.

O Status = 0

 

Criou o arquivo.zip com os arquivos compactados dentro dele.

 

Agora tem que ver até que número de Array ele começa a travar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Talvez o problema não seja a quantidade de pastas, e sim nomes longos de arquivos ou pastas. Acho que alguns recursos do windows tem problemas com nomes longos, me lembro de ter lido isso em algum lugar.

Observe se há algo de anormal nos arquivos que seja notado, como uma pasta com o nome muito grande, ou arquivos/pastas com 'ç', acentos, estas coisas.

É importante entender porque esta limitação aconteceu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não tem nenhum arquivo ou pasta com acentos ou Ç ou outro caracter especial.

Também não tem pastas ou arquivos com nomes muito extenso. +/- 12 caracteres é o máximo.

 

Se compactar pasta por pasta ele faz normalmente.

O problema é a trabalheira que dá ficar buscando pasta por pasta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.