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

Amigos,

 

Tem fazer uma função de Backup. Me parecer estar totalmente correta pois ele executou um procedimento na pasta em que eu estava e listou os arquivos e criou o ZIP. Abri o arquivo zip e estava lá tudo certinho. Porém quando fui tentar com um arquivo maior, a função correu certo, listou todos os arquivos de pastas e subpastas mas não gerou o arquivo ZIP, creio eu que pelo tamanho.

 

Gostaria de saber se é algo que tenho que alterar no PHP.ini ou no APACHE. Pois realmente ele não cria o arquivo quando tem um tamanho maior (nem é muita coisa - 8MB).

 

Fiz a função usando Copy e funcionou direitinho, só não está zipado.

 

Como devo proceder?

 

Obrigado a todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tanta aumentar a quantidade de memória que um script pode consumir:

 

memory_limit = 24M

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fui verificar essa questão no php.ini e já estava assim:

 

 

max_execution_time = 120 ; Maximum execution time of each script, in seconds

max_input_time = 120 ; Maximum amount of time each script may spend parsing request data

;max_input_nesting_level = 64 ; Maximum input variable nesting level

memory_limit = 128M ; Maximum amount of memory a script may consume (128MB)

Compartilhar este post


Link para o post
Compartilhar em outros sites

A execução do script demora mais que 2 minutos ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não chega a isso, porém se eu quizer compactar uma banco de dados que eu tenho de aproximadamente 100 Megas é possível que esbarre nesse tempo.

 

Tem alguma solução para o meu caso? Ainda não consigo compactar um arquivo de 8MB com função ZIP do php 5.2.6.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Porque nao aumenta entao?

 

max_execution_time = 120 ; Maximum execution time of each script, in seconds

Compartilhar este post


Link para o post
Compartilhar em outros sites

Porque não há anecessidade de aumentar mais o que isso.

 

Minhas perguntas:

O problema que está ocorrendo está no tempo de execução do scrip?

Por que estamos debatendo isso?

 

O arquivo de 8MB leva poco mais de 25 segundos para terminar de listar na tela para mim, com isso já estaria compactado. Mas não está fazendo.

 

Eu gostaria de saber se é alguma restrição ou limitação do PHP.INI ou do APACHE.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

As únicas limitações que eu conheço pra execução de um script é o tempo de execução e o máximo de recurso (memoria) que o mesmo vai consumir.

Se estes dois já estão autos, ai complica.

O tamanho do arquivo não representa a quantidade de memória que será consumida, esta provavelmente será muitas vezes maior que o seu arquivo de 8 mega. Se já está com 128 mega, coloca 512 só pra desencargo de consciência, pra ter certeza de que não está faltando memória pro processo.

E tem mais, alguns hosts não permitem a alteração de determinados valores no php.ini.

O script deveria exibir um erro, mas parece que este não apareceu. Então, coloque no início do script:

 

ini_set('display_errors', 'On');
error_reporting(E_ALL);

Isto deve apresentar alguma novidade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essas configurações no PHP.ini já está habilitadas.

Estou fazendo isso em um Host local, com Apache 2 e PHP 5.2.6 em minha máquina.

 

Executei novamente a função. Ela lista todos os arquivos dentro de todas as pastas mas não cria o arquivo zip.

Porém se eu executo a mesma função em uma pasta de tamnho equivalente uns 10Kb ele cria o arquivo zip com os arquivos desta pasta dentro.

 

Então por favor, verifique a função:

 

$pasta = "D:/bancodedados/";

$arquivo_zip = 'sql.zip';

$arquivos = array();

function ZiparBkp($pasta) {
global $arquivos;
	if ($in_pasta = opendir($pasta)) {
		while (false !== ($arq = readdir($in_pasta))) {
			if ($arq != "." && $arq != ".." && is_file($pasta.'/'.$arq)) {
				$arquivos[] = $pasta.'/'.$arq;
			}
			else if ($arq != "." && $arq != ".." && is_dir($pasta.'/'.$arq)) {
				ZiparBkp($pasta.'/'.$arq);
			}
		}
		closedir($in_pasta);
	}
	return $arquivos;
}

ZiparBkp($pasta);

$zip = new ZipArchive();

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

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

 

Só funciona com arquivos bem pequenos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Antes de mais nada, faça a reportagem de erros como eu sugeri acima.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não reporta erro. Nada.

 

A função exibe os arquivos que "supostamente" estão sendo compactados. Tudo funciona normalmente, menos aparecer erro. e criar o arquivo ZIP. Isso quando o arquivo é maior que, sei lá, 1 MB.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui no meu servidor rolou legal. É um Linux Ubuntu.

Meu php.ini está com as configurações default (memory_limit com 24mb).

 

Veja o script que utilizei, na verdade é o seu script, onde apenas mudei a pasta que será compactada:

 

<?php

//$pasta = "D:/bancodedados/";
// diretório com 9 mega de arquivos
$pasta = $_SERVER['DOCUMENT_ROOT'] . '/' . dirname($_SERVER['PHP_SELF']) . '/servers/';

$arquivo_zip = 'sql.zip';

$arquivos = array();

function ZiparBkp($pasta) {
global $arquivos;
	if ($in_pasta = opendir($pasta)) {
		while (false !== ($arq = readdir($in_pasta))) {
			if ($arq != "." && $arq != ".." && is_file($pasta.'/'.$arq)) {
				$arquivos[] = $pasta.'/'.$arq;
			}
			else if ($arq != "." && $arq != ".." && is_dir($pasta.'/'.$arq)) {
				ZiparBkp($pasta.'/'.$arq);
			}
		}
		closedir($in_pasta);
	}
	return $arquivos;
}

ZiparBkp($pasta);

$zip = new ZipArchive();

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

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

Então, imagino que o problema seja com a sua plataforma.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Observação: a máquina tem 256 de ram e é um pentium 3 de 800 megaherts, a operação não levou nem 1 segundo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fui testar aqui para verifica qual era o tamanho máximo da pasta para ele inserir o zip. E ele cria o arquivo ZIP e compacta pasta de até 1,08 MB. Mais do que isso não cria arquivo zipe e consequentemente não compacta arquivos.

 

Minha plataforma:

WinXP

Apache 2

PHP 5.2.6

Compartilhar este post


Link para o post
Compartilhar em outros sites

Testa em outro servidor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

INTERESSANTE.

 

Segui sua recomendação.

Instalei um XAMPP for Windows em outra máquina.

Apache 2.2

PHP 5.2.5

 

E a função funcionou perfeitamente com um arquivo de aproximadamente 52MB.

 

O que sugere que eu faça para igualar minha instalação manual a funcionar como no XAMPP, pois não tenho interesse em instalar o XAMPP no outro PC onde não funciona a função.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A hipótese de ser o hardware é nula, pois o servidor onde testei é bem fraquinho.

Bom, comece comparando o php.ini dos dois.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou comparando o PHP.ini.

 

Verifico uma questão. A extensãoes:

 

extension=php_mbstring.dll

extension=php_exif.dll

extension=php_mcrypt.dll

 

Estão dando erro. Elas não estavam habilitadas e quando habilitei o Apache não iniciou dando um erro que não encontrou as extensões na pasta c:\php\ext

 

Com isso para inicial o PHP tenho que desabilitar essas extensões.

 

Isso pode influenciar?

 

Como faço para essas extensões funcionarem?

Compartilhar este post


Link para o post
Compartilhar em outros sites

VAI ENTENDER

 

Na minha saga para compactar uma pasta, desinstalei o Apache e o PHP da minha máquina e instalei o XAMPP como está na outra máquina.

Quando testei na outra ele executou com perfeição, compactou uma pasta lotada de arquivos e subpastas com 51 MB.

 

Porém, na minha máquina o mesmo XAMPP, a mesma configuração, o mesmo tudo. E le continua fazendo arquivos pequenos e arquivos maiores não cria o ZIP.

Compartilhar este post


Link para o post
Compartilhar em outros sites

HUmm... vamos investigar então.

Qual a configuração (hardware) das duas máquinas ? Não esqueça de dizer se são 32 ou 64 bits.

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.