0

Como faço para listar os arquivos do ftp em um formulario

criado por Rafael Santos em 23/03/2010 2:33pm
É o seguinte, eu preciso de um formulario onde os fornecedores consigam fazer download de alguns arquivos de uma determinada pasta do ftp, alguém sabe como fazer?

Lista de Respostas:

0
Resposta Final (Undo)
23/03/2010 4:35pm
(~8 anos atrás)
Marcos Regis respondeu:
<?php

$remote_dir='.'; // Caminho para o diretório remoto
$ftp_server = 'ftp.dominio.com'; // FTP do destino
$ftp_user_name = 'nome_de_usuario';
$ftp_user_pass = 'senha_usuario';

// Conexão
$conn_id = ftp_connect($ftp_server);

// login 
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

// listando arquivos do diretório
$contents = ftp_nlist($conn_id, $remote_dir);

// exibindo
foreach($contents as $file)
  echo '<br />' . $file;

// fecha a conexão
ftp_close($conn_id);


Para fazer um download, adicione um link a cada arquivo e no PHP use assim
<?php

// define some variables
$local_file = 'php://stdout';
$server_file = isset($_GET['arquivo'])?$_GET['arquivo']:NULL;
if($server_file!=NULL)
{

$remote_dir='.'; // Caminho para o diretório remoto
$ftp_server = 'ftp.dominio.com'; // FTP do destino
$ftp_user_name = 'nome_de_usuario';
$ftp_user_pass = 'senha_usuario';

// conectando
$conn_id = ftp_connect($ftp_server);
// login 
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

// efetuando o download
if (!ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)) {
   
    echo "Ocorreu um erro\n";
}

// fecha a conexão
ftp_close($conn_id);
exit;

?> 

Para maiores detalhes consulte o manual
http://br2.php.net/ftp

0
23/03/2010 4:47pm
(~8 anos atrás)
Rafael Santos respondeu:
Num deu certo, ele num mostrou nada...

0
23/03/2010 4:53pm
(~8 anos atrás)
Rafael Santos respondeu:
Na verdade ele aparece os nomes dos arquivos só, num a opção de download...

0
23/03/2010 4:59pm
(~8 anos atrás)
Marcos Regis respondeu:
Como eu havia dito na mensagem anterior
é preciso personalizar a exibição.

tente trocar
// exibindo
foreach($contents as $file)
  echo '<br />' . $file;


por
// exibindo
echo '
    '; foreach($contents as $file) echo '
  1. <a href="/download.php?arquvio='. $file .'">' . $file .'</a>
  2. '; echo '
      ';

coloque o segundo código em um arquivo separado chamado download.php

0
24/03/2010 5:07pm
(~8 anos atrás)
Rafael Santos respondeu:
Po, vlw hein cara, ajudou muito, é isso mesmo

0
25/03/2010 1:53pm
(~8 anos atrás)
Matheus Ricelly respondeu:
O pessoal precisa desenrolar mais a questão dos estudos. Pedem uma solução aqui, mas, quando não dá certo, não se esforçam pra descobrir mais sobre o código. É como se fosse entregar de "Bandeja" as coisas.

Não estou falando especificamente do Rafael Santos, mas, vejo dezenas de casos aqui, que a pessoa pede um "auxílio", mais, que na realidade, quer é uma assessoria completa no código.

Temos que valorizar mais a linguagem e os programadores e procurar nos esforçar mais para resolvermos as nossas dúvidas. É óbvio que ninguém sabe tudo; temos dúvidas sim, mas, também, temos que nos esforçar e dá uma pesquisada ou até mesmo, a partir daquela dica inicial, explorar por conta própria as dúvidas.

É isso. Por favor, não se sinta ofendido Rafael, estou apenas querendo ajudar o pessoal a gostar mais de estudar. Mais sempre que precisar, estou aqui pra ajudar no que eu posso.

Abração!

0
25/03/2010 6:08pm
(~8 anos atrás)
Rafael Santos respondeu:
tudo bem, Matheus, eu entendo e acho que vc esta certo...
peço desculpas por isso...
Agora, tenho mais uma duvida quanto à esse codigo
eu fui dar uma mexida e tudo mais, pq, antes eu num tava conseguindo fazer o download certinho, ele da o seguinte erro, quando eu clico no link que aparece ele manda para esse Link:
http://www.meudominio.com.br/download.php?arquivo=webroot/arquivos/imagem.jpg

quando, na verdade, ele deveria mandar para esse:
http://www.meudominio.com.br/download.php?arquivo=arquivos/imagem.jpg

Eu sei que ele esta acontecendo pq os arquivos estão dentro do ftp, dentro da pasta webroot>arquivos, na hora de listar blz, mas, na hora de fazer o link, num tem como ficar sem o webroot, pq, webroot é onde fica o site, não tem nenhuma pasta onde o site esta chamada webroot, para ele abrir e depois abrir a pasta arquivos...
Eu sei que isso da certo pq eu digitei da segunda forma no browser e ele pegou, o unico problema é com o link mesmo...

Se do jeito que eu falei agora parecer que quero "de bandeija", me desculpe...
E, quanto a meu post que eu disse que era desse jeito, eu vi apenas os links, não cheguei a clikar neles para ver se iria efetuar o download...
agradeço desde já.

0
26/03/2010 12:09pm
(~8 anos atrás)
Marcos Regis respondeu:
Rafael, use o caminho como uma variável apenas presente no lado do servidor e mostre apenas o nome do arquivo. Lembrando que dessa forma vc não pode ter mais de um diretório no destino, somente poderá lista de um arquivo.

Tente assim
########## Arquivo listar.php
$remote_dir='./webroot/arquivos/'; // Caminho para o diretório remoto
$ftp_server = 'ftp.dominio.com'; // FTP do destino
$ftp_user_name = 'nome_de_usuario';
$ftp_user_pass = 'senha_usuario';

// Conexão
$conn_id = ftp_connect($ftp_server);

// login 
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

// listando arquivos do diretório
$contents = ftp_nlist($conn_id, $remote_dir);

// exibindo
foreach($contents as $file)
  echo '<a href="/download.php?arquvio='. (str_replace($remote_dir,"",$file)) .'">' . (basename($file)) .'</a>

// fecha a conexão
ftp_close($conn_id);


-------------------

########## Arquivo download.php

$local_file = 'php://stdout';
$remote_dir='./webroot/arquivos/'; // Caminho para o diretório remoto

$server_file = isset($_GET['arquivo'])? $remote_dir . $_GET['arquivo']:NULL;
if($server_file!=NULL)
{


$ftp_server = 'ftp.dominio.com'; // FTP do destino
$ftp_user_name = 'nome_de_usuario';
$ftp_user_pass = 'senha_usuario';

// conectando
$conn_id = ftp_connect($ftp_server);
// login 
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

// efetuando o download
if (!ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)) {
   
    echo "Ocorreu um erro\n";
}

// fecha a conexão
ftp_close($conn_id);
exit;


0
26/03/2010 12:45pm
(~8 anos atrás)
Rafael Santos respondeu:
é exatamente isso, agora abre perfeitamente, muito obrigado Marcos, e foi mal pelo meu jeito de antes, de "bandeja" abraço

0
26/03/2010 2:13pm
(~8 anos atrás)
Matheus Ricelly respondeu:
Que isso Rafael, peço mil desculpas pelo modo de falar, não foi contigo.

Não quis dizer diretamente a você.. me perdoe por favor. Apenas utilizei essa FAQ pra poder explanar isso. Eu também quando comecei tinha muitas dúvidas, mas, foi como um desabafo. Porque tem muitas pessoas me adicionando no MSN pra ficar apenas pedindo ajuda e talz, nem sequer obrigado dão e talz.

De forma alguma quis atingir você. Mais uma vez peço desculpas e estou aqui para ajuda-lo no que for preciso.

Valeu!

0
28/07/2011 2:00pm
(~7 anos atrás)
Renier respondeu:
Desculpe "desenterrar" um tópico tão antigo. Mas estou tentando utilizar este mesmo código que o Marcos passou e não estou conseguindo. Até a parte de listagem dos arquivos não estou tendo problemas, consigo listar todos os arquivos da minha pasta que pretendo fazer o download,consigo tb criar o link para os arquivos, mas os arquivos simplesmente não são baixados. Ao clicar no arquivo ele vai para a pagina do download e aparentemente aponta para o arquivo certo, exemplo ao clicar no arquivo "cf1132399835.zip" ele vai para o endereço http://www.facilsistemas.com.br/downloads/download.php?arquivo=cf1132399835.zip porém o arquivo não é baixado. Já não sei o que fazer, alguem por favor pode me ajudar?

Nova Resposta:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)