Зазвичай на ftp мені приходиться заливати файли інтернет-сторінок, тобто .html, .php і тому подібні. Проте одного разу, після подібного залиття сайту, він не хотів працювати коректно. Зазвичай видавав наступну помилку:
Fatal error: Unable to read XXX bytes in /XXX/XXX/ on line XXX
Справа в тім, що серед файлів сайту, були .php-файли, закодовані зендом, тобто вже не текстові команди, а зкомпільовані програмки. А заливав я їх туди в режимі ASCII, тобто в текстовому (так автоматично був налаштований ftp-клієнт).
В чому різниця? В різних операційних системах (ОС), в текстових файлах, певні службові символи (наприклад повернення каретки), є різними. І при перенесені текстових файлів з однієї ОС на іншу, ті службові символи, мають бути перетворені так, щоб в ОС, яка приймає файл, вміст файлу нормально відображався. Для цього й використовується текстовий режим (тип) передачі.
А при передачі в бінарному режимі, ніякі перетворення символів не здійснюються – файл просто передається байт за байтом, один в один.
Тобто текстовим (ASCII) режимом варто передавати тільки суто текстові файли. Якщо ж вам потрібно передати файли, будь-яким чином закодовані, або ж файли різного типу, або ж ви взагалі не впевнені, якого типу файли передаються, то варто використовувати бінарний режим передачі.
Деякі ftp-клієнти мають автоматичний режим, який для кожного файлу сам визначає необхідний режим ftp-передачі. В такому випадку потрібно бути особливо обережним при передачі зкомпільованих .php-файлів, тому що в цьому випадку ftp-клієнти їх часто визначають як текстові. І після цього починаються помилки виконання.