Página 2 de 3

ftp com TIPCLIENT do XHB

Enviado: 04 Mai 2013 16:33
por cjp
Como assim definir porta, José? Se vc estiver falando da linha oFTP:nDefaultPort := eFTPPORTA ou da linha #define eFTPPORTA 21, eu as desabilitei para testar, mas assim também não funcionou.

Marcos, verifiquei, está tudo em minúscula. Até testei mudando para maiúsculas, mas também não funciona.

ftp com TIPCLIENT do XHB

Enviado: 15 Jun 2013 17:11
por cjp
Meus amigos,

Será que não existe um jeito de a TIPCLIENT voltar a funcionar?

Estou precisando muito dessa função.

Alguém me ajuda, por favor?

ftp com TIPCLIENT do XHB

Enviado: 15 Jun 2013 18:12
por fladimir
Se ja tentou com o xHarbour e não deu tenta com o HARBOUR pra testar, eu uso o Harbour e a tipclient direto todos os dias em diversos clientes e funciona bem.


[]'s

ftp com TIPCLIENT do XHB

Enviado: 16 Jun 2013 00:25
por cjp
Eu uso o Harbour, não o Xharbour.

Saberia me dizer por que comigo não funciona mais? Sempre funcionou, mas há alguns meses parou de funcionar, inexplicavelmente.

ftp com TIPCLIENT do XHB

Enviado: 16 Jun 2013 01:58
por Jairo Maia
Olá Inácio (cjp),

Já tentou entrar em contato com o suporte do seu provedor para saber se houve alteração de porta? Pergunto porque desde 01/01/2013 os provedores no Brasil desativaram as portas consideradas vulneráveis.

ftp com TIPCLIENT do XHB

Enviado: 16 Jun 2013 14:08
por fladimir
CJP seus problemas acabaram.... Não é produto tabajara e sim um pequeno erro de lógica....

Eu peguei seu código e compilei e rodei linha a linha com o DEBUG (q uso muito e me ajuda muito) e percebi o erro de lógica que vou transcrever no teu código abaixo e comentar, lembrando q tive q fazer alguns ajustes pra poder funcionar, mas nada q afetasse a real necessidade.

Código: Selecionar todos

//--> Esta parte esta abaixo da function enviaftp, mas eu por questão de forma de trabalho coloquei acima, mas isso não é o problema ok...
#include "inkey.ch"
#include "fileio.ch"
#include "common.ch"
#include "Directry.ch"
#define eFTPSERVER1 'ftp.meuenderecoftp.com.br'    // ENDEREÇO SERVIDOR FTP 01
#define eFTPPORTA 21              // PORTA DO FTP PARA BAIXAR ATUALIZAÇÕES DO SISTEMA
#define eFTPUSER  'myuser'          // USUARIO DO FTP PARA BAIXAR ATUALIZAÇÕES DO SISTEMA
#define eFTPPASS  'mypassword'           // SENHA DO FTP PARA BAIXAR ATUALIZAÇÕES DO SISTEMA

function enviaftp()
altd() //--> chamo o debug pra acompanhar
   arqv := 'testeftp.exe'  //->meu arquivo a ser enviado pro FTP pra testar
   pasta := 'www\'    //-> minha pasta a ser changed qdo logar no FTP
	aDir0 := directory(arqv)
   IF UPLOAD_ARQ( alltrim(pasta), alltrim(arqv) ) = .F.
      @ maxrow(),1 say "Arquivo não enviado                               "
      tone(261.7,23)
      inkey(10)
      return .f.
   else
      return .t.
   ENDIF
   RETURN NIL

STATIC FUNCTION UPLOAD_ARQ( FTPDIR, farq )
   Local cUrl, oUrl, oFTP, cFTPSERVER:=''
   LOCAL vzerr := 0, cLista:=''   //--> criei aki como local pq a primeira vzerr dava erro q eu não tinha essa variavel talvez no teu código macro estivesse vindo como public ou private de alguma chamada anterior, porém aki pra efeito de testes defini como zero e local os valores iniciais, e a outra eu explico mais abaixo.
   cFTPSERVER:=eFTPSERVER1
   cUrl := "ftp://" + eFTPUSER + ":" + eFTPPASS + "@" + cFTPSERVER
   oUrl       := tUrl():New( cUrl )
   oFTP       := tIPClientFtp():New( oUrl, .F. )
   oFTP:nConnTimeout := 20000
   oFTP:bUsePasv  := .T.
   oFTP:nDefaultPort := eFTPPORTA //PORTA DO FTP
   oFTP:oUrl:cUserID := eFTPUSER
   oFTP:oUrl:cServer := cFTPSERVER
   oFTP:oUrl:cPassword := eFTPPASS
   IF oFTP:Open( cUrl )
   
		clista:=oFTP:List()   //--> isso aki eu uso pra ver o conteudo da onde estou no FTP é tipo um comando DIR, pq ai no debug eu vejo o conteudo desta variavel durante a execução do código acompanhando seu valor
      
//--> aki é o X da questão, observe q vc mandou ele trocar de diretório mas se não achar cria, PORÉM SE ACHAR ELE JÁ TROCOU ENTENDE...
		IF !oFTP:Cwd(ftpdir) // se não achar o diretorio ele cria
         cria="N"
         if us="I"
            @ maxrow(),1 say "Pasta "+ftpdir+" inexistente no FTP; criar a pasta?"get cria pict "@!"
            tone(261.7,33)
            read
         endif
         if cria="S"
            oFTP:MKD(ftpdir)  // cria o diretorio
         else
            return .f.
         endif
      ENDIF                                                    

// ESSE IF ABAIXO ESTA ANALISANDO SE MUDAR DE PASTA NÃO DER CERTO AI MANDA UM EMAIL E RETORNA FALSO, PORÉM A CONDIÇÃO ACIMA É VERDADEIRA ELE JÁ ENCONTRA A PASTA E MUDA AUTOMATICAMENTE A CONDIÇÃO ABAIXO SE NÃO TIVER OUTRA PASTA COM O MESMO NOME VAI RETORNAR FALSO, DANDO A IMPRESSÃO QUE NÃO ESTA FUNCIONANDO, PORÉM A LÓGICA É Q FAZENDO COM Q RETORNE FALSO POIS NÃO TEM OUTRA PASTA DE MESMO NOME.

/*
      if oFTP:Cwd(ftpdir)=.f.   // muda o diretorio
         if vzerr=1 .or. int(vzerr/15)=vzerr/15
			   mandmail1("","Retornou .f. no cwd; COMUNS 431")
         endif
         vzerr++
         return .f.
      ENDIF
*/
      if oFTP:reset()=.f.  //--> ESSA CONDIÇÃO EU NÃO USO NO MEU CÓDIGO E NÃO SEI EXPLICAR PORÉM AO TESTAR NÃO INFLUENCIOU.
       //  mandmail1("","Retornou .f. no reset; COMUNS 438")
         return .f.
      endif

//--> O RESTANTE BLZ VAI Q VAI...
      if oFtp:UploadFile( farq )=.f.  
         if usooff#"S"
            @ maxrow(),1 say "Não é possível enviar o arquivo"
         endif
         return .f.
      endif
      oFTP:Close() // fecha a conexão do FTP
   ENDIF
RETURN( .T.)
Dá uma olhada aí e me fala se deu certo ou se eu viajei na maionese e seu problema continua...

Abraço

Sucesso!!

ftp com TIPCLIENT do XHB

Enviado: 17 Jun 2013 00:25
por cjp
De fato, amigo, estava errada minha função. Agora funcionou. Muito obrigado.

ftp com TIPCLIENT do XHB

Enviado: 17 Jun 2013 10:51
por fladimir
CJP, q bom q deu certo.

[]'s

ftp com TIPCLIENT do XHB

Enviado: 29 Ago 2013 23:31
por cjp
Colegas,

Mais uma vez esta função está dando erro.

A função que está dando erro é assim:

Código: Selecionar todos

Function listaftp(pasta)
   ftpproto ="ftp://" //posthilit">ftp://"
   ftpserver = ftps // posthilit">ftp.servidor.com.br"  endereço de ="posthilit">FTP</span> do site
   ftpuser = "inaciobr"   //Usuário da conta ="posthilit">FTP</span>
   curl:=ftpproto+ftpuser+":"+snhftp+"@"+ftpserver
   oUrl:= turl():new(curl)
   oCred:= tIPCredentials()
   oFtp:= tipclientftp():NEW(oUrl,,.T.)
   oFTP:nConnTimeout := 20000
   oFTP:bUsePasv     := .T.
   IF oFTP:Open()
       if oFTP:Cwd(pasta)=.f.
          return .f.
       endif			   
       clista:=oFTP:List()
       if usebase("arqbx","S")=.t.
          dele all
          pack
          clista=substr(clista,40)
          do while .t.
              if empty(clista) .or. at("www.ina",clista)=1
                 exit
              endif
              nrfinal=at(".",substr(clista,1,10))+3
              if at(".",substr(clista,nrfinal,5))=0
                append blank
                repl nome with substr(clista,1,nrfinal)
              else
                  nrfinal=nrfinal+4
              endif						
              clista=substr(clista,nrfinal+42)
              if len(clista)<5
                 exit
              endif
        enddo
      else
          return .f.
      ENDIF
  else
     return .f.
  endif
  oFTP:Close()
Return .t.

O erro está dando na abertura da pasta do FTP, nesta lista:

Código: Selecionar todos

	        if oFTP:Cwd(pasta)=.f.
Não consigo entender por que ele não consegue abrir a pasta, sendo que a pasta existe no FTP.

O pior é que o erro acontece apenas de vez em quando, não é em todas as vezes.

Tem algum jeito de descobrir a razão disso?

ftp com TIPCLIENT do XHB

Enviado: 30 Ago 2013 09:32
por fladimir
Qual o erro q aparece?

Eu testei aki, direcionando pro meu ftp, usuário e senha e definindo uma pasta do mesmo na variável PASTA e não processando a função usabase q não é pertinente ao assunto no meu ponto de vista e acompanhando via DEBUG deu tudo certo...

Teríamos q analisar o erro pra podermos ter uma ideia melhor.

[]´s

ftp com TIPCLIENT do XHB

Enviado: 30 Ago 2013 21:41
por cjp
Então, o problema é que eu não consigo saber qual o erro. Aliás, nem é propriamente um erro. Apenas a linha

Código: Selecionar todos

if oFTP:Cwd(pasta)=.f.
retorna .f., sem qualquer explicação, pois a pasta existe no FTP.

E o pior é que isso não acontece sempre. Às vezes retorna .t., às vezes .f.

Tem como ao menos eu conseguir saber a razão disso?

ftp com TIPCLIENT do XHB

Enviado: 30 Ago 2013 23:10
por fladimir
Não tenho idéia... dá impressão q seja algo com o Servidor onde vc hospeda, mas não dá pra saber...

Vc experimentou outra versão do xHB pra comparar a nível de testes?

[]´s

ftp com TIPCLIENT do XHB

Enviado: 31 Ago 2013 05:31
por Jairo Maia
Olá Inácio,

Já tentou usar um temporizador? Por exemplo:

Código: Selecionar todos

nTentativas := 1
While oFTP:Cwd(pasta)=.f.
  InKey( .5 )  // aguarda 1/2 segundo
  nTentativas++
  If nTentativas = 3  // após 3 tentativas p.e.
    Hb_Alert( "Falha na conexão com o servidor.;Tente novamente depois." )
    Return .f.
  EndIf
EndDo

ftp com TIPCLIENT do XHB

Enviado: 31 Ago 2013 10:49
por fladimir
Boa ideia Jairo... já q o problema é esporádico pelo q o colega afirmou, pode ser algo a nível de conexão FTP com o server q hospeda, então a ideia de fazer um laço com 1 temporizador é uma possibilidade.

[]´s

ftp com TIPCLIENT do XHB

Enviado: 02 Set 2013 00:29
por cjp
Realmente é uma boa ideia, Jairo. Não tinha pensado nisto antes.

Implantei essa modificação agora. Vou testar e depois informo.

Obrigado por enquanto.