Fórum UPload - Transferência de arquivos PHP #620394
12/08/2023
0
Tenho um aplicativo desenvolvido em PHP, CSS, HTML tudo misturado, hehehe, este aplicativo funcionou muito bem até meados de julho/2023, usando para transferência de dados usando o comando: ftp_put($ftp, $ftp_arquivo, $local_arquivo, FTP_ASCII); e para receber os arquivos usando o ftp_get($conn_id,$local_file, $remote_file, FTP_ASCII).
Sendo que para ENVIO LOCAL, na mesma rede continua funcionando, mas se estou FORA usando outro Wi-fi não funciona. Aplicativo conecta mas não consegue transferir os arquivos, nem para Download e Upload.
Para receber o arquivos necessários consegui resolver da seguinte forma:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | $curl = curl_init( $ftp_server . $ftp_porta ); $fo = fopen ( "$local_file" , 'w' ); curl_setopt( $curl , CURLOPT_TRANSFERTEXT, TRUE); curl_setopt( $curl , CURLOPT_FILE, $fo ); #output curl_setopt( $curl , CURLOPT_USERPWD, "$ftp_user_name:$ftp_user_pass" ); curl_setopt( $curl , CURLOPT_FRESH_CONNECT, true); if ( file_exists ( $localFile )) { curl_setopt( $curl , CURLOPT_RESUME_FROM, filesize ( $local_File )); } curl_exec( $curl ); fclose( $fo ); curl_close( $curl ); |
[b]Mas para Enviar os arquivos não estou conseguindo, mudei o ftp_put para o ftp_raw da seguinte forma:[/b]
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 | $ftp = ftp_connect( $servidor , $porta ); // Retorno: true ou false ftp_raw( $ftp , "AUTH TLS" ); ftp_raw( $ftp , "AUTH SSL" ); // Faz o login no servidor FTP $login = ftp_login( $ftp , $usuario , $senha ); // Retorno: true ou false //*****************************************************************// ftp_raw( $ftp , "CWD /backup" ); ftp_raw( $ftp , "TYPE A" ); // Envia o arquivo pelo FTP em modo ASCII $connect = ftp_raw( $ftp , "PASV" ); // parse the response and build the IP and port from the values if ( count ( $connect ) > 0 && preg_match( "/.*\((\d+),(\d+),(\d+),(\d+),(\d+),(\d+)\)/" , $connect [0], $m )) { $address = "{$m[1]}.{$m[2]}.{$m[3]}.{$m[4]}" ; $port = $m [5] * 256 + $m [6]; print_r(ftp_raw( $ftp , "STOR $ftp_arquivo" )); $sock = socket_create(AF_INET, SOCK_STREAM, 0); if ( $sock ) { socket_connect( $sock , $address , $port ); socket_write( $sock , file_get_contents ( $ftp_arquivo )); socket_close( $sock ); } } ftp_raw( $ftp , 'QUIT' ); |
Dessa forma que estou tentando transferir, quase que dá certo, executa todos os processos, aparece a mensagem que esta sendo transferido, mas dá erro conforme log abaixo:
1 2 3 4 | (000036)11/08/2023 16:38:50 - mymobile (179.54.xxx.xxx)> PASV (000036)11/08/2023 16:38:50 - mymobile (179.54.xxx.xxx)> 227 Entering Passive Mode (xxx,xxx,xxx,xxx,19,171) (000036)11/08/2023 16:38:50 - mymobile (179.54.xxx.xxx)> STOR pedidos1013110823-10.xml (000036)11/08/2023 16:39:00 - mymobile (179.54.xxx.xxx)> 425 Can't open data connection. |
O interessante é que, fazendo a transferência pelo FileZilla Client não dá erro o arquivo é transferido normalmente, conforme podemos ver no log abaixo.
1 2 3 4 5 6 | (000035)11/08/2023 16:37:36 - mymobile (179.54.xxx.xxx)> 200 Type set to A (000035)11/08/2023 16:37:36 - mymobile (179.54.xxx.xxx)> PASV (000035)11/08/2023 16:37:36 - mymobile (179.54.xxx.xxx)> 227 Entering Passive Mode (xxx,xxx,xxx,xxx,19,169) (000035)11/08/2023 16:37:36 - mymobile (179.54.xxx.xxx)> STOR pedidos1013110823-10.xml (000035)11/08/2023 16:37:36 - mymobile (179.54.xxx.xxx)> 150 Connection accepted (000035)11/08/2023 16:37:36 - mymobile (179.54.xxx.xxx)> 226 Transfer OK |
A pergunta é: O que estou fazendo de errado? Existe outra solução?
ps: Não muito conhecimento com PHP

Dirceu Morais
Curtir tópico
+ 0Posts
15/08/2023
Dirceu Morais
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | $ch = curl_init(); $diretorioRemoto = '/backup/meuarquivo.txt' ; //local do arquivo no servidor $localfile = './envia/meuarquivo.txt' ; //local do arquivo no cliente $fp = fopen ( $localfile , 'r' ); curl_setopt( $ch , CURLOPT_UPLOAD, 1); curl_setopt( $ch , CURLOPT_INFILE, $fp ); curl_setopt( $ch , CURLOPT_INFILESIZE, filesize ( $localfile )); curl_setopt( $ch , CURLOPT_USERPWD, "$serverUser:$serverPass" ); curl_exec ( $ch ); $error_no = curl_errno( $ch ); curl_close ( $ch ); if ( $error_no == 0) { $error = 'File uploaded succesfully.' ; } else { $error = 'File upload error.' ; } echo "<script language='JavaScript'>parent.alert('Transmissão do arquivo $error $error_no');</script>" ; |
Gostei + 0
17/08/2023
Dirceu Morais
Mudei meu código para:
1 2 3 4 5 6 7 8 9 | $ftp = ftp_connect( $server , $port ); // Retorno: true ou false ftp_raw( $ftp , "AUTH TLS" ); ftp_raw( $ftp , "AUTH SSL" ); $login = ftp_login( $ftp , $user , $password ); // Retorno: true ou false ftp_raw( $ftp , "CWD /backup" ); ftp_raw( $ftp , "TYPE A" ); $connect = ftp_raw( $ftp , "PASV" ); ftp_raw( $ftp , "STOR $ftp_arquivo" ); ftp_raw( $ftp , 'QUIT' ); |
No roteador:
-Liberei o DMZ direcionando o IP para a maquina local
-Liberei a Porta 2121 e direcionei o IP para maquina local
No Firewall liberei a porta: 2121 e as portas passivas: 50000-50100
No FileZilla informe a porta: 2121 e as portas Range de portas: 50000-50100
Gostei + 0
25/08/2023
Dirceu Morais
Consegui descobrir
Obrigado a todos que leram meu post e pensaram em me ajudar.
Gostei + 0
31/08/2023
Israel Ruiz
Gostei + 0
07/02/2024
Dirceu Morais
Consegui descobrir
Obrigado a todos que leram meu post e pensaram em me ajudar.
Galera 'EU NOVAMENTE'
A solução que encontrei fui simplesmente colocar um "S" no put.
$envio = @ftp_puts($ftp, $ftp_arquivo, $local_arquivo, FTP_ASCII);
Mas agora começou a dar o mesmo problema. Só consigo receber o arquivo no meu Aplicativo para transmitir não estou conseguindo.
;-( ;-< Tô tristi
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)