12

Я сделал резервную копию с моего FTP-сервера, используя lftp и Transmit (приложение Mac). Все хорошо, но есть разный размер файла для 1-2 файлов, но они идентичны.

Первый файл:

http://dl.dropbox.com/u/229956/deadcow_seo.php

Второй файл:

http://dl.dropbox.com/u/229956/deadcow_seo.php_2.php

В чем разница между этими двумя файлами?

2 ответа2

25

deadcow_seo.php использует окончания строк Unix (LF), в то время как deadcow_seo.php_2.php использует окончания строк DOS/Windows (CR LF).

FTP имеет несколько "режимов передачи", из которых два находятся в общем пользовании 1 - двоичная (также называемый "образ") и текст (или "ASCII"). В "двоичном" режиме файл передается точно так, как он есть, побайтово, а "ASCII" заставляет файл интерпретироваться как состоящий из строк текста - окончания строк при отправке преобразуются в сетевой стандарт CR LF и преобразуется в родные окончания строки машины при получении.

Передача файлов в виде текста поначалу может иметь некоторый смысл, но это только позже вызывает проблемы - фактически, некоторые FTP-серверы полностью удалили его или сделали его эквивалентным двоичному на стороне сервера. Кроме того, большинство текстовых редакторов (исключая Блокнот) могут читать и сохранять файлы в форматах Windows и Unix.

Просто настройте свой FTP-клиент так, чтобы он всегда использовал двоичный режим - обычно это команда bin или mode i , в то время как графические клиенты могут иметь флажок или список типов файлов в своих настройках.


1 Некоторыми старыми режимами являются "tenex" (давно устаревший, для файлов на основе страниц TENEX) и "сжатый" (который, похоже, определяется как простой алгоритм RLE). Последние FTP-серверы поддерживают "режим z" для сжатия zlib.

12

Вы использовали текстовый (или ASCII) режим передачи, который заменяет разрывы строк во время передачи. Это часто полезно, когда вы разрабатываете скрипты и программы для Windows и переносите файлы в Linux или Mac OS X. В противном случае они просто не будут работать, так как система видит данные мусора в конце каждой строки.

Если файл имеет один разрыв строки Windows, \r\n (или CRLF), и вы загрузили его в Linux или Mac OS X, он был заменен на \n (или LF), что на 1 байт меньше. Использование FileMerge для сравнения файлов подтверждает это в строке состояния:

Также смотрите этот ответ по интерпретации данных.


Вы можете настроить, какие типы файлов будут интерпретироваться как текст в настройках Transmit:

Вы можете удалить все расширения файлов из этого списка и просто стандартизировать в Linux/Mac OS X разрывы строк, т.е. \n , даже при использовании Windows. Большинство редакторов способны изменить режим окончания строки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .