Pessoal,
Boa tarde.
Esse recurso do PHP já é conhecido por muita gente, mas se não for o caso, vou tentar ajudar quem ainda não conhece esse poderoso recurso do PHP, que é a integração com servidores utilizando o protocolo FTP, que nos permite transferir arquivos entre servidores.
Conectando no servidor
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
public function conectarFTP() { $servidor = 'ftp.servidor.com.br'; // Endereço $usuario = 'usuario_ftp'; // Usuário $senha = 'senha_ftp'; // Senha $porta = 21; // Porta padrão $timeout = 9000; // Tempo em segundos para encerrar a conexão caso não haja resposta $ftp = ftp_connect( $servidor, $porta, $timeout ); // Retorno: true ou false if ( !$ftp ) { return false; } $login = ftp_login( $ftp, $usuario, $senha ); // Retorno: true ou false if ( !$login ) { return false; } return $ftp; } |
Enviando arquivos
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
public function enviarArquivosPorFTP( $strArquivoLocal, $strArquivoRemoto ) { $ftp = $this->conectarFTP(); if ( !is_resource( $ftp ) ) { return false; } if ( !is_file( $strArquivoLocal ) ) { echo "<br\/>Arquivo de origem '{$strArquivoLocal}' n\u00e3o existe!"; return false; } // Alterna o modo de conexão para PASSIVO. No modo passivo, as conexões de dados são iniciadas pelo cliente, ao invés do servidor. Pode ser necessário se o cliente estiver atrás de um firewall. ftp_pasv( $ftp, true ); // Faz o upload do arquivo no modo BINÁRIO (Deve ser FTP_ASCII ou FTP_BINARY.) $envio = ftp_put( $ftp, $strArquivoRemoto, $strArquivoLocal, FTP_BINARY ); // Retorno: true / false if ( $envio ) { echo "<br\/>Arquivo '{$strArquivoLocal}' enviado para o FTP como '{$strArquivoRemoto}'!"; } else { echo "<br\/>Falha ao enviar o arquivo {$strArquivoLocal} para o FTP!"; ftp_close( $ftp ); // Fecha a conexão com o FTP return false; } ftp_close( $ftp ); // Fecha a conexão com o FTP return true; } |
Baixando arquivos
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
public function baixarArquivosPorFTP( $strArquivoRemoto, $strArquivoLocal ) { $ftp = $this->conectarFTP(); if ( !is_resource( $ftp ) ) { return false; } // Alterna o modo de conexão para PASSIVO. No modo passivo, as conexões de dados são iniciadas pelo cliente, ao invés do servidor. Pode ser necessário se o cliente estiver atrás de um firewall. ftp_pasv( $ftp, true ); // Faz o download do arquivo no modo BINÁRIO (Deve ser FTP_ASCII ou FTP_BINARY.) $download = ftp_get( $ftp, $strArquivoLocal, $strArquivoRemoto, FTP_BINARY ); // Retorno: true / false if ( $download ) { echo "<br\/>Arquivo '{$strArquivoRemoto}' baixado com sucesso do FTP para '{$strArquivoLocal}'"; } else { echo "<br\/>Falha ao baixar o arquivo {$strArquivoRemoto} do FTP!"; ftp_close( $ftp ); // Fecha a conexão com o FTP return false; } ftp_close( $ftp ); // Fecha a conexão com o FTP return true; } |
Listando arquivos
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
public function listarArquivosPorFTP( $strDiretorio, $strBusca ) { $ftp = $this->conectarFTP(); if ( !is_resource( $ftp ) ) { return false; } // Alterna o modo de conexão para PASSIVO. No modo passivo, as conexões de dados são iniciadas pelo cliente, ao invés do servidor. Pode ser necessário se o cliente estiver atrás de um firewall. ftp_pasv( $ftp, true ); // Altera o diretório atual para "/arquivos/fotos/" ftp_chdir($ftp, "/arquivos/fotos/"); // Lista os arquivos na forma de array() $arquivos = ftp_nlist($ftp, "."); ftp_close( $ftp ); // Fecha a conexão com o FTP return $arquivos; } |
Ainda temos a função ftp_rawlist para listar os arquivos no FTP de forma detalhada, exibindo permissões, datas, etc..
Exemplo:
1 2 |
$saida = ftp_rawlist($ftp, '/'); var_dump($saida); |
O exemplo acima irá exibir algo como isso:
1 2 3 4 5 6 7 8 |
array(3) { [0]=> string(65) "drwxr-x--- 3 vincent vincent 4096 Jul 12 12:16 public_ftp" [1]=> string(66) "drwxr-x--- 15 vincent vincent 4096 Nov 3 21:31 public_html" [2]=> string(73) "lrwxrwxrwx 1 vincent vincent 11 Jul 12 12:16 www -> public_html" } |
E é isso! Até a próxima, pessoal!