Я пересылаю файлы между серверами и только что начал замечать, что некоторые из них изменяются, превращаясь в одну длинную непрерывную строку, в отличие от исходных возвратов и разрывов строк. Я предполагаю, что это как-то связано с типом передачи моего FTP-клиента, который изначально был установлен на «Авто», но имел «Двоичный» и «ASCII» в качестве дополнительных опций.
Короче говоря, каковы различия между способами передачи файла с одного сервера на другой, и смогут ли эти различия изменить файл таким образом, как я упоминал выше?
Перенос ИЗ Windows К Linux.
«Двоичный» режим передачи FTP копирует файлы точно, байт за байтом. Просто и понятно.
Однако при переносе текстовых файлов между разными операционными системами это может быть не то, что вам нужно - разные операционные системы используют разные коды для представления разрывов строк. Для этого существует режим «ASCII»: он автоматически переводит все окончания строк из формата исходной системы в формат назначения.
Не уверен насчет «Авто», но я полагаю, что расширение файла или что-то подобное похоже, чтобы решить, является ли это текстовый файл, и пытается угадать подходящий режим.
Какой режим вы хотите, зависит от того, что именно вы делаете с файлами ... если вы просто копируете их для резервного копирования, вы, вероятно, захотите скопировать в двоичном режиме, чтобы они были точно такими же, когда позже вы снова восстановите их на сервере Windows. Если их нужно использовать как текстовые файлы (возможно, как файлы конфигурации для кроссплатформенной программы?) С обеих сторон, вы захотите использовать режим ASCII для их перевода.
РЕДАКТИРОВАТЬ: Насколько я могу судить, FTP-передача файлов из Windows в Linux никогда не должна приводить к исчезновению разрывов строк ... тем не мение, если вы скопируете их в режиме ASCII, а затем принесете назад к серверу Windows в двоичном режиме окончания строк в стиле Linux могут не распознаваться в окне Windows. (Блокнот их не увидит; Wordpad увидит; YMMV с другим программным обеспечением.)
(Сегодня такое удобство - автоматическое преобразование окончаний строк - может показаться странным в таком базовом протоколе, как FTP. Однако, когда был изобретен FTP, отправка текстовых файлов была нормой, и одной из целей протокола было сделать это как можно проще.)
Действительно, есть различия, и они будут мешать передаче файлов, отличных от обычного текста, если вы не используете двоичную опцию - обычно всегда используйте, если все в порядке :)
Windows и Unix имеют разные байты в конце строк (Windows - шестнадцатеричный код 0D 0A, Unix - только 0A). При передаче файлов в двоичном режиме байты файла будут перемещены с одного компьютера без изменений. Это требуется для двоичных форматов (например, файлов ZIP, изображений и т. Д.), Но может привести к проблемам с текстовыми файлами: например, notepad.exe в Windows будет отображать текстовый файл только с разрывами строк в стиле unix как одну длинную строку, редактор unix может отображать ^ M в конце каждой строки при просмотре стиля Windows.
Поэтому технически для двоичных форматов (zip, jpg, png и бесконечное множество других) вам необходимо установить FTP в BINARY, а для текстовых форматов (HTML, PHP, CGI и т. Д.) Вам нужно установить его в ASCII.
Большинство хороших программ FTP также имеют автоматическую настройку, что означает, что они будут определять режим (BINARY или ASCII) в зависимости от хорошо известных расширений файлов, например он автоматически переключит передачу файла JPG в ДВОИЧНЫЙ и отправит / получит файл PHP в режиме ASCII.
В какую операционную систему вы передаете файлы? Linux / Unix использует другой перенос строки, чем Windows. Поэтому, если вы создадите файл на компьютере с Linux и откроете его в Windows, это может выглядеть странно. Есть утилиты, чтобы исправить это, хотя, по моему опыту, если вы используете Wordpad в Windows вместо блокнота, все будет в порядке.