Pergunta

Eu criei um script PHP para atualizar um servidor web que está ativo dentro de um diretório local.Estou migrando o script para Python.Funciona bem na maior parte, mas após um comando PUT, o tamanho do arquivo parece mudar.Assim, o tamanho do arquivo é diferente daquele do arquivo no servidor.

Depois de baixar novamente o arquivo do servidor FTP, a única diferença é a marca CR/LF.Isso me irrita porque o mesmo script está comparando o tamanho dos arquivos a serem atualizados.Além disso, caso isso signifique alguma coisa, o script funciona perfeitamente em PHP via ftp_put.

from ftplib import FTP

ftpserver = "myserver"
ftpuser = "myuser"
ftppass = "mypwd"

locfile =  "g:/test/style.css"
ftpfile =  "/temp/style.css"

try:
    ftp = FTP(ftpserver, ftpuser, ftppass)
except:
    exit ("Cannot connect")

f = open (locfile, "r")
try:
    ftp.delete (ftpfile)
except:
    pass

# ftp.sendcmd ("TYPE I")
# ftp.storlines("STOR %s" % ftpfile, f)
ftp.storbinary("STOR %s" % ftpfile, f)
f.close()

ftp.dir (ftpfile)
ftp.quit()

Alguma sugestão?

Foi útil?

Solução

Você precisa abrir o locfile em binário usando rb?

f = open (locfile, "rb")

Outras dicas

Bem, se você acessar as propriedades do seu arquivo no Windows ou em um ambiente *nix, notará dois tamanhos.Um é o tamanho do setor e o outro é o tamanho real.O tamanho do setor é o número de setores em bytes usados ​​no disco rígido.Isso ocorre porque dois arquivos não podem estar no mesmo setor com a maioria dos sistemas de arquivos modernos; portanto, se o seu arquivo preencher metade do setor, todo o setor será marcado como preenchido.

Portanto, você pode estar comparando o tamanho do arquivo do setor com o tamanho real do arquivo no servidor FTP ou vice-versa.

Arquivos pequenos ocupam um nó inteiro no sistema de arquivos, seja qual for o tamanho.

Meu host tende a relatar todos os arquivos pequenos como 4kb no FTP, mas em um shell fornece um tamanho preciso, portanto pode ser um 'recurso' comum aos clientes FTP.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top