Ir ao conteúdo
  • Cadastre-se

PHP Transferência de arquivos - php


Ir à solução Resolvido por Dirceu Morais,

Posts recomendados

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?

 

 

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

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

Link para o comentário
Compartilhar em outros sites

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!