php - Unterschiede in der Dateigröße nach dem Kopieren einer Datei auf einen Server über FTP

Translate

Ich habe ein PHP-Skript erstellt, um einen Webserver zu aktualisieren, der sich in einem lokalen Verzeichnis befindet. Ich migriere das Skript nach Python. Es funktioniert größtenteils einwandfrei, aber nach einem PUT-Befehl scheint sich die Größe der Datei zu ändern. Daher unterscheidet sich die Größe der Datei von der der Datei auf dem Server.

Sobald ich die Datei erneut vom FTP-Server heruntergeladen habe, ist der einzige Unterschied die CR / LF-Markierung. Das ärgert mich, weil dasselbe Skript die Größe der zu aktualisierenden Dateien vergleicht. Falls es etwas bedeutet, funktioniert das Skript auch perfekt in PHP vía 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()

Irgendwelche Vorschläge?

This question and all comments follow the "Attribution Required."

Alle Antworten

Translate

Müssen Sie die locfile in binär mit öffnenrb?

f = open (locfile, "rb")
Quelle
Translate

Wenn Sie in Windows oder einer * nix-Umgebung unter die Eigenschaften Ihrer Datei gehen, werden Sie zwei Größen bemerken. Eine ist die Sektorgröße und eine ist die tatsächliche Größe. Die Sektorgröße ist die Anzahl der Sektoren in Bytes, die auf Ihrer Festplatte verbraucht sind. Dies liegt daran, dass sich zwei Dateien mit den meisten modernen Dateisystemen nicht im selben Sektor befinden können. Wenn Ihre Datei also die Hälfte des Sektors ausfüllt, wird der gesamte Sektor als gefüllt markiert.

Möglicherweise vergleichen Sie also die Größe der Sektordatei mit der tatsächlichen Dateigröße auf dem FTP-Server oder umgekehrt.

Quelle
Translate

Kleine Dateien nehmen einen ganzen Knoten im Dateisystem ein, unabhängig von der Größe.

Mein Host meldet in der Regel alle kleinen Dateien als 4 KB in FTP, gibt jedoch in einer Shell eine genaue Größe an, sodass dies möglicherweise eine für FTP-Clients übliche Funktion ist.

Quelle