Текстовые и бинарные файлы в Windows

uliss

Новичок
Текстовые и бинарные файлы в Windows

Здравствуйте!
С PHP в Windows никогда не работал - поэтому есть вопрос: в документации на fopen сказано что есть спец. флаг открытия файла - 'b' - он предназначен для бинарных файлов в Windows.
Также указано, что могут быть проблемы с изображениями, если не указавать этот флаг.
При этом, как я понял, трансляции символов "\n" - как в C, в зависимости от типа открытия файла не происходит.

Вопрос: какие проблемы могут возникнуть, при несоответствии режима открытия файла и его содержания ("смешной вид" я не имею ввиду) и с какими функциями для работы с файлами.

-~{}~ 29.10.05 00:49:

Сорри на трансляцию - пропустил, балда!
 

Nimous

Guest
uliss
А какая разница?
Сказано в мане, что нельзя, значит-нельзя.
или ты им не доверяешь?
 

uliss

Новичок
Просто я пытаюсь понять, в чем может быть разница работы или ее нет вообще.
Если есть, то при ипользовании каких функций?
Пример(речь о Windows):
создаем текст. файл (с раздел. "\r\n").
читаем его построчно с помощью fgets(). она ведь возвращает строку вместе c разделителем.
Так какая тогда разница в режиме открытия файла?

Или это имеет значение только для открытия файлов из других систем? (другие символы завершители строки)
 

berkut

Новичок
Different operating system families have different line-ending conventions. When you write a text file and want to insert a line break, you need to use the correct line-ending character(s) for your operating system. Unix based systems use \n as the line ending character, Windows based systems use \r\n as the line ending characters and Macintosh based systems use \r as the line ending character.

If you use the wrong line ending characters when writing your files, you might find that other applications that open those files will "look funny".

Windows offers a text-mode translation flag ('t') which will transparently translate \n to \r\n when working with the file. In contrast, you can also use 'b' to force binary mode, which will not translate your data. To use these flags, specify either 'b' or 't' as the last character of the mode parameter.

The default translation mode depends on the SAPI and version of PHP that you are using, so you are encouraged to always specify the appropriate flag for portability reasons. You should use the 't' mode if you are working with plain-text files and you use \n to delimit your line endings in your script, but expect your files to be readable with applications such as notepad. You should use the 'b' in all other cases.

If you do not specify the 'b' flag when working with binary files, you may experience strange problems with your data, including broken image files and strange problems with \r\n characters.
 

uliss

Новичок
berkut спасибо, но я именно искал что за "strange problems with your data".

Ведь если я запишу текстовый файл в Windows с Unix завершителем строк (не собираюсь их открывать в других программвх типа Блокнота), то потом открыв файл в PHP я смогу так же отлично с ним работать.
Непонятно также, транслируются символы "\n" или "\010" - то есть если у меня есть сериализованный объект (сериализ. своим методом) и в этой строке есть символ "\010", он будет транслироваться?
И не совсем понятно о "битых" изображених: зачем может понадобиться работать с ними через функции fopen, fgets, fread и др.
 

SiMM

Новичок
> Непонятно также, транслируются символы "\n" или "\010" - то есть если у меня есть сериализованный объект (сериализ. своим методом) и в этой строке есть символ "\010", он будет транслироваться?
Возьми да проверь.

> И не совсем понятно о "битых" изображених: зачем может понадобиться работать с ними через функции fopen, fgets, fread и др.
Мало ли зачем. В конце концов - файл может быть просто абстрактным файлом, изображение в нём или нет - неважно. Важно, что без b ты будешь работать не в binary safe mode. Вот и всё. Не хочешь сюрпризов - всегда пиши b и не парься.
 

uliss

Новичок
SiMM - буду устанавливать PHP & Windows :( (в который раз) и проверять.
И если есть ссылочка на "сюрпризы" - буду очень признатетелен.
 

SiMM

Новичок
> И если есть ссылочка на "сюрпризы" - буду очень признатетелен.
> If you do not specify the 'b' flag when working with binary files, you may experience strange problems with your data, including broken image files and strange problems with \r\n characters.
Хочешь сюрпризы - не пользуй b. Не хочешь - ставь и не парься.
PS: если у человека нет проблем - он их выдумывает себе сам.
 
Сверху