Подтвердить что ты не робот

Различия в размере файла после копирования файла на сервер vía FTP

Я создал PHP-скрипт для обновления веб-сервера, который находится внутри локальной директории. Я перевожу скрипт в Python. По большей части он работает нормально, но после команды PUT размер файла меняется. Таким образом, размер файла отличается от размера файла на сервере.

Как только я снова загружаю файл с FTP-сервера, единственным отличием является отметка CR/LF. Это меня раздражает, потому что тот же скрипт сравнивает размер файлов для обновления. Кроме того, в случае, если это что-то значит, скрипт отлично работает на PHP через 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()

Какие-либо предложения?

4b9b3361

Ответ 1

Вам нужно открыть файл locfile в двоичном формате с помощью rb?

f = open (locfile, "rb")

Ответ 2

Хорошо, если вы перейдете к свойствам вашего файла в Windows или в среду * nix, вы заметите два размера. Один из них - размер сектора, а один - фактический размер. Размер сектора - это количество секторов в байтах, которые используются на вашем жестком диске. Это связано с тем, что два файла не могут находиться в одном секторе с большинством современных файловых систем, поэтому, если ваш файл заполняет половину сектора, весь сектор помечен как заполненный.

Итак, вы можете сравнить размер файла сектора с фактическим размером файла на FTP-сервере или наоборот.

Ответ 3

Маленькие файлы занимают целые node в файловой системе любого размера.

Мой хост имеет тенденцию сообщать обо всех небольших файлах как 4kb в ftp, но в оболочке дает точный размер, поэтому это может быть "особенность", общая для ftp-клиентов.