Views: 3.363 views
Staff,
Good afternoon.
This feature of PHP is already known to many people, but if not, I will try to help those who do not know this powerful feature of PHP, which is the integration with servers using the FTP protocol, which allows us to transfer files between servers.
Connecting to the server
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; } |
Uploading Files
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ão 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; } |
Downloading Files
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; } |
Listing files
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; } |
We still have the function ftp_rawlist to list files in FTP in detail, displaying permissions, dates, etc.
Example:
1 2 |
$saida = ftp_rawlist($ftp, '/'); var_dump($saida); |
The above example will display something like this:
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" } |
And that's it! See you next time, guys!