46

ローカル ディレクトリ内にある Web サーバーを更新するための PHP スクリプトを作成しました。スクリプトを Python に移行しています。ほとんどの場合は問題なく動作しますが、PUT コマンドを実行すると、ファイルのサイズが変化するように見えます。したがって、ファイルのサイズはサーバー上のファイルのサイズとは異なります。

FTP サーバーからファイルを再度ダウンロードすると、唯一の違いは CR/LF マークです。同じスクリプトが更新するファイルのサイズを比較しているため、これは私を悩ませます。また、何らかの意味がある場合、スクリプトは ftp_put を介して PHP で完全に動作します。

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

助言がありますか?

4

3 に答える 3

17

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

f = open (locfile, "rb")
于 2008-08-05T13:45:38.413 に答える
3

Windows または *nix 環境でファイルのプロパティを調べると、2 つのサイズに気付くでしょう。1 つはセクター サイズで、もう 1 つは実際のサイズです。セクター サイズは、ハードディスクで使用されているセクターのバイト数です。これは、ほとんどの最新のファイル システムでは 2 つのファイルを同じセクターに配置できないためです。そのため、ファイルがセクターの半分を使用すると、セクター全体が使用済みとしてマークされます。

そのため、セクター ファイルのサイズを FTP サーバー上の実際のファイル サイズと比較したり、その逆を行ったりすることがあります。

于 2008-08-05T13:45:47.867 に答える
0

小さなファイルは、サイズに関係なく、ファイル システムのノード全体を占有します。

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

于 2008-08-05T15:59:24.773 に答える