Ir para conteúdo

POWERED BY:

Arquivado

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

mmb

Problema com script para download

Recommended Posts

Bom galera, to fazendo um repositório(pra quem conhece tipo o sourceforge, svn), estou com um problema na hora de fazer o download, ja procurei no php.net inclusive nos comentarios, aqui no fórum e até agora nao consegui. A maneira mais próxima que consegui foi aparecer a janelinha de download so que o arquivo vem corrompido. Alguem teria algum script funcional? Nunca pensei que esses headers iam da tanto trabalho :wacko:

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php
$filename = "Gexion.zip";
$myFile = "C:\Users\Matheus\Desktop\Gexion.zip";
$size = filesize($myFile);


header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header("Content-Type: application/force-download");
header('Content-Disposition: attachment; filename='.basename($filename));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
header('Pragma: no-cache');
header('Content-Length: '.$size);
header("Expires: 0");

readfile($myFile);

ob_clean();
flush();
?>

 

Ta ae, eu ja tinho pego la da quele topico, mas o arquivo vem corrompido, ele tem 70 kb e na janelinha aparece apenas 40 bytes...

Compartilhar este post


Link para o post
Compartilhar em outros sites

teste assim:

<?php
$path	   = 'C:\Users\Matheus\Desktop\Gexion.zip';
$fileName = basename( $path );

		header("Content-Type: application/force-download");
		header("Content-type: application/octet-stream;");
		header("Content-Length: " . filesize( $path ) );
		header("Content-disposition: attachment; filename=" . $fileName );
		header("Pragma: no-cache");
		header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
		header("Expires: 0");
		readfile( $path );
		flush();
?>

 

apenas uma pergunta..

 

o caminho "C:\Users\Matheus\Desktop\Gexion.zip" possui permissão para acesso pelo PHP ??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Teoricamente sim, tanto que quando tiro os headers aparece as informações do arquivo(os códigos HEX)... Mas vou mudar pra pasta pasta htdocs pra ver se funciona..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom desse seu código fica +/-, no ie fica assim:

Imagem Postada

 

No firefox aparece certinho "Gexion.zip, 69.7 kb" porem ao salvar e abrir o arquivo:

Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem algo errado

 

no atributo filename está apacendo o nome do script php

 

deveria aparecer o nome do arquivo zip

 

 

 

bom.. faça um teste

 

desabilite o "octet-stream" e o "Cache-Control" e use file_get_contents no lugar de readfile

 

 

exemplo

 

<?php
$path	   = 'C:\Users\Matheus\Desktop\Gexion.zip';

		header("Content-Type: application/force-download");
		//header("Content-type: application/octet-stream;");
		header("Content-Length: " . filesize( $path ) );
		header("Content-disposition: attachment; filename=" . basename( $path ) );
		header("Pragma: no-cache");
		//header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
		header("Expires: 0");
		echo file_get_contents( $path );
		flush();
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

apenas um detalhe

 

quando fizer alterações no script nao utilize o refresh ( F5 ) do browser

 

opte por clicar na barra de endereço e pressionar ENTER

 

se fizer refresh pode ocorrer do dados aparecerem printados na tela como você comentou no post acima

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tirando o cache aparece o nome corretamente no IE, no Firefox tanto faz com ou sem que o nome aparece normalmente, o problema é que você salva o arquivo(ele vem com mesmo tamanho e etc) so que vem corrompido conforme imagem acima que mostrei ;x

Compartilhar este post


Link para o post
Compartilhar em outros sites

como est[á o codigo que modificou ?

 

qual o sistema operacional etá usando ?

versao do apache e php ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz as mesmas alterações que o seu,

Estou utilizando o Xampp 1.6.7 que portanto utiliza Apache HTTPD 2.2.9 e PHP 5.2.6 no Windows Vista Ultimate...

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao sei o que você está fazendo

 

o script que mostrei é foi testado nos sistemas operacionais

 

- windows 9X, 2k, xp, vista

- fedora, ubuntu, red hat

 

browser: ie 5+ atual, ff1+, ne4+, opera6+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara coloquei um .pdf e salvou e abriu aparentemente normal, um .doc o arquivo ficou em branco, um .txt ao invés de aparecer o texto, apareceu isso: "<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tran"... Não sei o que fazer :S

 

E se eu der só um readfile no .txt aparece o conteudo dele...

Compartilhar este post


Link para o post
Compartilhar em outros sites

estranho..

uso esse mesmo script, faz dowload de binario, ascii, etc..

 

 

tente testar em outro pc

Compartilhar este post


Link para o post
Compartilhar em outros sites

Após alguns testes acho que existe algum tipo de incompatibilidade com o windows vista, pois rodei em uma máquina virtual com Windows XP e esse script funcionou perfeitamente, rodei em um servidor de um cliente e também funcionou. Agora basta saber como sanar essa incompatibilidade, se o bug ja foi reportado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

detalhe..

 

qual a versao do php, apache e SO do server ?

como fez a instalação e configuração do php, apache ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, no windows vista estava usando os pack que vem tudo pronto, primeiramente utilizei o XAMPP mas como não tava funcionando esse script fui utilizar o VERTRIGO e também deu problema.

Instalei uma maquina virtual com windows xp e instalei o php/apache manualmente e o script funcionou. Instalei com os mesmos passos e etc no windows vista(tomando cuidado para setar as pastas no C: por causa do UAC) e o script não funciona. Na maquina virtual testei o XAMPP e o VERTRIGO e em todos os 2 o script funciona perfeitamente.

 

Ja tentei desativar o UAC e também não tive sucesso, não sei o que fazer :S

Compartilhar este post


Link para o post
Compartilhar em outros sites

era o que eu suspeitava...

 

evite o uso dessas ferramentas pois prejudicam o aprendizado e dificultam a produção com assuntos aparentemente simples como esse..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, o problema é que mesmo instalando manualmente o php/apache no windows vista NÂO funciona, ja procurei na net e não achei ninguém com problema parecido, no xp utilizando pack's prontos ou instalando manualmente funciona perfeitamente...

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.