Jump to content


Photo

Iniciar Download Automáticamente


  • Faça o login para participar
13 replies to this topic

#1 Douglas Rocha

Douglas Rocha

    Novato no fórum

  • Usuários
  • 5 posts
  • Sexo:Não informado

Posted 20/01/2009, 12:10

Tenho um script que inicia o download de um arquivo, até aí tudo bem.

O meu problema é a impossibilidade do usuário pausar estes downloads, mesmo ultilizando gerenciadores, não consigo pausar o download iniciado, e depois continuar de onde parei...

e visto que o meu site vai trabalhar com arquivos relativamente pesados de 150Mb, preciso que o usuario tenha a possibilidade de pausa os downloads.

Eu não sei se é possível habilitar esta pausa no download, se for, peço que me ajudem, se não... rsrs ... me avisem para que eu pare de procurar na net =p

gostaria de saber tb se isso é alguma configuraçãodo APACHE.

abaixo segue meu script...


[codebox]function smartReadFile($location, $filename, $mimeType='application/octet-stream')
{ if(!file_exists($location))
{ header ("HTTP/1.0 404 Not Found");
return;
}

$size=filesize($location);
$time=date('r',filemtime($location));

$fm=@fopen($location,'rb');
if(!$fm)
{ header ("HTTP/1.0 505 Internal server error");
return;
}

$begin=0;
$end=$size;

if(isset($_SERVER['HTTP_RANGE']))
{ if(preg_match('/bytes=\h*(\d+)-(\d*)[\D.*]?/i', $_SERVER['HTTP_RANGE'], $matches))
{ $begin=intval($matches[0]);
if(!empty($matches[1]))
$end=intval($matches[1]);
}
}

if($begin>0||$end<$size)
header('HTTP/1.0 206 Partial Content');
else
header('HTTP/1.0 200 OK');

header("Content-Type: $mimeType");
header('Cache-Control: public, must-revalidate, max-age=0');
header('Pragma: no-cache');
header('Accept-Ranges: bytes');
header('Content-Length:'.($end-$begin));
header("Content-Range: bytes $begin-$end/$size");
header("Content-Disposition: inline; filename=$filename");
header("Content-Transfer-Encoding: binary\n");
header("Last-Modified: $time");
header('Connection: close');

$cur=$begin;
fseek($fm,$begin,0);

while(!feof($fm)&&$cur<$end&&(connection_status()==0))
{ print fread($fm,min(1024*16,$end-$cur));
$cur+=1024*16;
}
}


smartReadFile("./0002-xxx_project-cena1-ujkkrhfi.wmv","0002-xxx_project-cena1-ujkkrhfi.wmv","video/wmv");[/codebox]

agradeço desde já.

#2 silici0

silici0

    ?

  • Usuários
  • 902 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP
  • Interesses:PHP, MySQL, XHTML, CSS, AJAX, JavaScript, Objective-C, Python, Games ... #geek

Posted 20/01/2009, 17:53

Não é possivel, quem faz isso são os gerenciadores, eles que devem ver tamanho e tudo mais do arquivo, verificar hash, integridade e dentre outros...

Abraços
Procurando freelancer
***********************************************
Bachelor of Technology in Technology of Information, with great knowledge in Windows operating systems and Unix-Like (BSD, Ubuntu and Slackware), languages (PHP, JavaScript and MySQL), semantic (DHTML, Tableless, Ajax, MVC, OO) and analysis (manages projects based on PMI).
Developer in PHP, JAVA, Python, Objective-c MySQL, DHTML, CSS, JAVASCRIPT, JQUERY, JSON, SMARTY, MDB2, DOCTRINE, CAKEPHP. Linux desktop for work and MacOS. E-commerces, CRM and bussiness strategys
Love-me and be FREE use UniCes-Like .

#3 Cristiano Galdino

Cristiano Galdino

    Dark Defender

  • Administradores
  • 3738 posts
  • Sexo:Masculino
  • Localidade:Brasília, DF

Posted 20/01/2009, 18:10

Se você tiver acesso as configurações do Apache basta forçar o download. Isso deve funcionar:
<FilesMatch "\.(wmv|mp3)">
	ForceType application/octet-stream
</FilesMatch>

Cristiano Galdino
- http://cristiano.galdino.net/

“Since 2003”


#4 Douglas Rocha

Douglas Rocha

    Novato no fórum

  • Usuários
  • 5 posts
  • Sexo:Não informado

Posted 21/01/2009, 09:44

vlw pela atenção de vcs!

Cristiano Galdino, talvez eu naum tenha sido compreendido... pois eu consigo forçar o download... o problema é pausar eles.
até configurei o APACHE como vc disse... mais naum funcionou...

e silici0 ... como assim são os gerenciadores que fazem isso ? vc entendeu q eu quero fazer uma espécie de gerenciador?

uq eu quero é q justamente os gerenciadores possam pausar o download forçado pela minha página, até é possível fazer o download pelo gerenciador, mais nenhum deles conseguem pausar o download.

abraços!!

Edição feita por: Douglas Rocha, 21/01/2009, 09:45.


#5 Maykel Esser

Maykel Esser

    Super Veterano

  • Usuários
  • 1536 posts
  • Sexo:Masculino
  • Localidade:Curitiba - PR

Posted 21/01/2009, 10:19

Acredito que aí, não tenha a ver com o PHP e sim com o gerenciamento do servidor em que está hospedado, então vou mover este tópico para a sala adequada ;)

Se este post lhe ajudou, ajude o fórum também. Use a reputação de mensagens! add.png


#6 silici0

silici0

    ?

  • Usuários
  • 902 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP
  • Interesses:PHP, MySQL, XHTML, CSS, AJAX, JavaScript, Objective-C, Python, Games ... #geek

Posted 21/01/2009, 16:40

vlw pela atenção de vcs!

Cristiano Galdino, talvez eu naum tenha sido compreendido... pois eu consigo forçar o download... o problema é pausar eles.
até configurei o APACHE como vc disse... mais naum funcionou...

e silici0 ... como assim são os gerenciadores que fazem isso ? vc entendeu q eu quero fazer uma espécie de gerenciador?

uq eu quero é q justamente os gerenciadores possam pausar o download forçado pela minha página, até é possível fazer o download pelo gerenciador, mais nenhum deles conseguem pausar o download.

abraços!!


Em php não tem como você gerenciar, somente com aplicação desktop! PHP é uma linguagem que roda no servidor e não no cliente.

Abraços
Procurando freelancer
***********************************************
Bachelor of Technology in Technology of Information, with great knowledge in Windows operating systems and Unix-Like (BSD, Ubuntu and Slackware), languages (PHP, JavaScript and MySQL), semantic (DHTML, Tableless, Ajax, MVC, OO) and analysis (manages projects based on PMI).
Developer in PHP, JAVA, Python, Objective-c MySQL, DHTML, CSS, JAVASCRIPT, JQUERY, JSON, SMARTY, MDB2, DOCTRINE, CAKEPHP. Linux desktop for work and MacOS. E-commerces, CRM and bussiness strategys
Love-me and be FREE use UniCes-Like .

#7 Douglas Rocha

Douglas Rocha

    Novato no fórum

  • Usuários
  • 5 posts
  • Sexo:Não informado

Posted 21/01/2009, 22:59

silici0, vlw de novo cara!

mais tipo, eu realmente naum quero gerenciar o download com php naum. eu apenas preciso q os downloads, iniciados a partir do script q eu mostrei, sejam passíveis de pausa. só isso rsrs =)


vlw mesmo. abração.

#8 boirock

boirock

    Tecnologia para todos (agora hexa campeão)

  • Usuários
  • 1559 posts
  • Sexo:Masculino
  • Localidade:Curitiba - PR
  • Interesses:PostgreSQL - PHP

Posted 21/01/2009, 23:11

:ponder: pensando aqui com meus botões... acho que com uma dose de AJAX até seria possível e bem divertido de fazer...
Porém, como frisado por todos, não faria sentido baixar o arquivo para o servidor e depois ter que baixar do servidor de novo :D.
Só se o servidor rodasse em localhost para o cliente.

#9 Cristiano Galdino

Cristiano Galdino

    Dark Defender

  • Administradores
  • 3738 posts
  • Sexo:Masculino
  • Localidade:Brasília, DF

Posted 21/01/2009, 23:32

Parece que só eu entendi a dúvida... hehe

Se você forçar o download com o Apache os gerenciadores conseguem retomar o download quando esse for pausado, pelo menos no meu servidor funciona.
<FilesMatch "\.(wmv|mp3)">
	ForceType application/octet-stream
</FilesMatch>

Cristiano Galdino
- http://cristiano.galdino.net/

“Since 2003”


#10 Crab

Crab

    Da paz, mas preparado para Guerra

  • Ex-Admins
  • 2521 posts
  • Sexo:Masculino
  • Localidade:Florianópolis - SC
  • Interesses:Desenvolvimento Gráfico e Web.

Posted 21/01/2009, 23:35

Olha... na minha lógica é o servidor que deve permitir ou não continuar um download após ele ter sido interrompido... sendo assim isso é na configuração do mesmo.
Não sei como definir tais configurações, mas a possibilidade de ser como o Cristiano postou são grandes.

abraço Até mais

#11 Douglas Rocha

Douglas Rocha

    Novato no fórum

  • Usuários
  • 5 posts
  • Sexo:Não informado

Posted 24/01/2009, 00:12

vlw a todos pela atenção.

eu testei as configurações do Cristiano, mais naum funcionou...
e Cristiano, quando vc fala em forçar o download a patir do Apache, seria forçar o download sempre q na url tiver .wmv ou .mp3 ?
pq se for assim, pra mim naum vale mtu a pena, pois eu já quero forçar o download pelo php, para q os usuários naum vejam a url do vídeo...

na verdade eu preciso verificar se o usuário fez login numa página, e só então iniciar o download... se eu mostrar a url para os usuários, estes vão disponibilizar os endereços dos vídeos para quem naum é usuário cadastrado. se alguém tem alguma outra maneira de fazer isso... faz dias q eu tou correndo atráz disso.

vlw de novo a peciência de vcs.

abração.

putz. ninguém ?! =\

Edição feita por: Douglas Rocha, 23/01/2009, 19:07.


#12 Douglas Rocha

Douglas Rocha

    Novato no fórum

  • Usuários
  • 5 posts
  • Sexo:Não informado

Posted 04/02/2009, 11:26

complicado... ninguém consegue resolver meu problema ?? :(

#13 Alan cordeiro

Alan cordeiro

    Novato no fórum

  • Usuários
  • 1 posts
  • Sexo:Masculino
  • Localidade:Rio Branco - Acre

Posted 02/11/2010, 01:16

Na verdade ninguém entendeu o que o realmente foi perguntado.

Quando um arquivo é acessado diretamente na hospedagem é diferente de quando se usa uma linguagem de programação. O que ele está fazendo é forçar o download de um arquivo com PHP, ele define os headers dizendo que se trata de uma transferencia e com a função readfile() joga pro cliente o arquivo. O problema é toda vez que for solicitado o arquivo, o download será iniciado do inicio do arquivo (não foi pleonasmo). E o conceito do pause e continue não é esse, o gerenciador deseja continuar de onde ele parou, para isso ele deveria adaptar o script usando a função fread() do PHP que ler qualquer parte especificada do arquivo, idependente se ela esteja no inicio ou no fim do arquivo.

Nos comentários da função fread() no http://php.net/manua...ction.fread.php o Edward Jaramilla mostra um função criada por ele de como permitir o tal pause e continue de download usando php.

#14 freon

freon

    Novato no fórum

  • Usuários
  • 1 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 02/02/2011, 09:55

[...]para q os usuários naum vejam a url do vídeo...

na verdade eu preciso verificar se o usuário fez login numa página, e só então iniciar o download... se eu mostrar a url para os usuários, estes vão disponibilizar os endereços dos vídeos para quem naum é usuário cadastrado. se alguém tem alguma outra maneira de fazer isso... faz dias q eu tou correndo atráz disso.


pelo o que eu entendi, você quer disponibilizar um arquivo apenas para usuários cadastrados (isso nao tem nada a ver com a possibilidade de pausar e continuar um download, mas enfim..)

eu acredito que a forma ideal de fazer isso é criar uma pagina comum com controle de usuário (só os cadastrados tem acesso), e caso esteja logado, dispara o script pra download, mas sem disponibilizar o arquivo original, e sim uma cópia (em outra pasta, com outro nome) que será excluida ao término do download.
assim, não se tem acesso ao arquivo original.

em outras palavras:
./root/arquivos/ArquivoOriginal.mp3 -> Copia e Move -> ./root/tempFolder/ArquivoCopia.mp3 -> download do ArquivoCopia.mp3 -> Ao Término, deleta ArquivoCopia.mp3

páginas que vão ajudar você:
http://php.net/manua...nction.copy.php
http://php.net/manua...tion.rename.php
http://php.net/manua...tion.unlink.php




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq