Ir ao conteúdo

PHP Transferência de arquivos - php


Ir à solução Resolvido por Dirceu Morais,

Posts recomendados

Postado

Amigos estou com um problemão aqui já tem alguns dias e não consigo resolver.

 

Tenho um aplicativo desenvolvido em PHP, CSS, HTML tudo misturado, hehehe, este aplicativo funcionou muito bem até meados de julho, usando para transferência de dados o comando:  $envio = ftp_put($ftp, $ftp_arquivo, $local_arquivo, FTP_ASCII); e para receber os arquivos eu uso comando: $GET

 

Agora o sistema conecta mas não transferir os arquivos, nem para Download e Upload.

 

Para receber o arquivos necessários consegui resolver da seguinte forma:

  $curl = curl_init($ftp_server.$ftp_porta);
           $fo = fopen("$local_file", 'w');
           
           curl_setopt($curl, CURLOPT_URL, "ftp://$ftp_server:$ftp_porta/$remote_file"); #input
           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);

 

Mas para Enviar os arquivos não estou conseguindo,

          $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,'CLOSE');

Dessa forma que estou tentando transferir, quase que dá certo, executa todos os processos, aparece a mensagem que esta sendo transferido, mas dá erro:

 

(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 /recebe/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. 

(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?

 

 

  • 2 semanas depois...
Postado

Ninguém???

Já estou começando a me desesperar, não consigo resolver:

Estou fazendo dessa forma agora:

 

<?php
// Dados do servidor
$porta = '21';

$servidor='200.200.100.50';

$usuario='dirceu';

$senha='morais';

// Abre a conexão com o servidor FTP
$ftp = ftp_connect($servidor, $porta); // Retorno: true ou false
if (!$ftp) {
   Echo "Não foi possível fazer conexão no servidor";
   Exit;
}

// Faz o login no servidor FTP
$login = ftp_login($ftp, $usuario, $senha); // Retorno: true ou false
If (!$login) {
    Echo "não foi possível fazer o login no servidor";
    ftp_close($ftp);
    Exit;
}
// ======

// Define variáveis para o envio de arquivo
$local_arquivo = '/storage/emulated/legacy/htdocs/pdvmobile/envia/meuarquivo.txt'; // Localização (local)
$ftp_pasta = '/backup/'; // Pasta (externa)
$ftp_arquivo = 'meudocumento.txt'; // Nome do arquivo (externo)
if(file_exists($local_arquivo)) {
    Echo "Arquivo existe  \n\n";
} Else
    Echo "Arquivo não existe em $local_arquivo";

$tempHandle = fopen($local_arquivo, 'wb');
ftp_pasv($ftp,true);
// Envia o arquivo pelo FTP em modo ASCII
$envia = @ftp_put($ftp, $ftp_pasta.$ftp_arquivo, $local_arquivo, FTP_ASCII, 0); // Retorno: true / false
// Encerra a conexão ftp
ftp_close($ftp);

if (!$envia) {
    Echo "Não consegui fazer upload do arquivo";
} Else
    echo 'Arquivo enviado com sucesso!';

    

?>

 

 

Prov.png

ProvII.png

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...