2008-08-05 14 views
35

ローカルディレクトリ内に存在するWebサーバを更新するためのPHPスクリプトを作成しました。 私はスクリプトをPythonに移行しています。 PUTコマンドの後では、ファイルのサイズが変わるように見えます。したがって、ファイルのサイズはサーバー上のファイルのサイズとは異なります。ファイルをサーバにコピーした後のファイルサイズの違いFTP

ファイルをFTPサーバーから再度ダウンロードすると、唯一の違いはCR/LFマークです。これは、同じスクリプトが更新するファイルのサイズを比較しているので、私を悩ます。また、何かを意味する場合には、スクリプトはPHP vaの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() 

答えて

17

rbを使用してlocfileをバイナリで開く必要がありますか?

f = open (locfile, "rb") 
+0

ありがとう、これは私が必要とする目の間のショットだった、私はすべての週末これ以上の壁に私の頭を叩いて過ごした。これはftpから転送する逆のシナリオにも当てはまります。 – snarkyname77

+0

あなたのアドバイスで完璧に動作します。ありがとう! (2分で肯定的な応答、うわー) – PabloG

+0

@PabloGあなたは本当に今のコメントをしたのですか、タイムワープに吸い込まれましたか? –

3

Windowsまたは* nix環境でファイルのプロパティを使用すると、2つのサイズがわかります。 1つはセクタサイズで、1つは実際のサイズです。セクタサイズは、ハードディスク上で使用されているセクタのバイト数です。これは、最新のファイルシステムでは2つのファイルが同じセクタに存在することができないため、ファイルがセクタの半分を占める場合、セクタ全体が満たされているとマークされます。

セクタのファイルサイズとFTPサーバーの実際のファイルサイズを比較したり、その逆の場合もあります。

0

サイズが小さいファイルシステムでは、小さなファイルはノード全体を占有します。

私のホストは、すべての小さなファイルをftpで4kbと報告する傾向がありますが、シェルでは正確なサイズが与えられているため、ftpクライアントにとって共通の「機能」である可能性があります。

関連する問題