关于php:将文件复制到FTP服务器上后的文件大小差异

关于php:将文件复制到FTP服务器上后的文件大小差异

File size differences after copying a file to a server vía FTP

我创建了一个PHP脚本来更新位于本地目录中的Web服务器。
我正在将该脚本迁移到Python中。 在大多数情况下,它工作正常,但是在执行PUT命令后,文件的大小似乎已更改。 因此,文件的大小与服务器上文件的大小不同。

一旦我再次从FTP服务器下载文件,唯一的区别就是CR / LF标记。 这让我很烦,因为同一脚本正在比较要更新的文件的大小。 另外,万一它有任何意义,该脚本可以在PHPvíaftp_put中完美运行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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()

有什么建议么?


您是否需要使用rb以二进制形式打开locfile?

1
f = open (locfile,"rb")

好吧,如果您进入Windows或* nix环境中的文件属性,则会注意到两种大小。 一种是扇区大小,一种是实际大小。 扇区大小是硬盘上已用完的扇区数(以字节为单位)。 这是因为两个文件不能与大多数现代文件系统位于同一扇区中,因此,如果您的文件占满了扇区的一半,则整个扇区都被标记为已填充。

因此,您可能正在将扇区文件大小与FTP服务器上的实际文件大小进行比较,反之亦然。


无论大小,小文件都会占据文件系统上的整个节点。

我的主机倾向于将所有小文件报告为ftp中的4kb,但在外壳程序中给出的大小准确,因此它可能是ftp客户端所共有的"功能"。


推荐阅读