|
ь и забыть
о том, что в Windows (в отличие от Unix) для разделения полного пути файла
исполь-
зуются не прямые, а обратные слэши. Интерпретатору PHP совершенно все равно,
какие слэши вы будете использовать: прямые или обратные. Он в любом случае пе-
реведет их в ту форму, которая требуется вашей ОС, а функции по работе с
полными
именами файлов также не будут против "чужих" слэшей.
Во-вторых, вы теперь можете работать с файлами на удаленных серверах Web в точ-
ности так же, как и со своими собственными (ну, разве что записывать в них
можно
не всегда). Если вы предваряете имя файла строкой http:// или ftp://, то PHP
понимает, что нужно на самом деле установить сетевое соединение и работать
именно
с ним, а не с файлом. При этом в программе такой файл ничем не отличается от
обычного (если у вас есть соответствующие права, что вы можете и записывать в
по-
добный HTTP- или FTP-файл).
О текстовых и бинарных файлах
Во многих (да что там — практически во всех) языках программирования для работы
с текстовыми файлами применяется некоторый трюк. Вот в чем он заключается. Не
секрет, что в Unix-системах для отделения одной строки файла от другой
использует-
ся один специальный символ — его принято обозначать \n.
Обращаю ваше внимание на то, что \n здесь обозначает именно один символ,
т. е., один байт. Когда PHP встречает комбинацию \n в строке (например,
"это \n тест"), он воспринимает ее как один байт. В то же время, в строке,
заключенной в апострофы, комбинация \n не имеет никакого специального
назначения и обозначает буквально "символ \, за которым идет символ n".
В Windows по историческим причинам для разделения строк применяется не один, а
сразу два символа, следующих подряд, — \r\n. Для того чтобы языки программиро-
вания были лучше переносимы с одной операционной системы на другую, при чтении
текстовых файлов эта комбинация \r\n преобразуется "на лету" в один символ \n,
так что программа и не замечает, что формат файла не такой, как в Unix. В
результа-
те этой деятельности, если мы, например, прочитаем содержимое всего текстового
Глава 15. Работа с файлами 245
файла в строку, то длина такой строки наверняка окажется меньше физического
раз-
мера файла — ведь из нее "съелись" некоторые символы \r. Это относится к
системе
Windows и MacOS (кстати, в последней применяется комбинация не \r\n, а наобо-
рот — \n\r, что довольно-таки забавно). При записи строки в текстовый файл про-
исходит в точности наоборот: один \n становится на диске парой \r\n.
Впрочем, практически во всех языках программирования вы можете и отключить
режим автоматической трансляции \r\n в один \n. Обычно для этого используется
вызов специальной функции, который говорит, что для указанного файла нужно при-
менять бинарный режим ввода/вывода, когда все байты читаются, как есть. Правда,
программисты, всю жизнь писавшие под Unix, склонны игнорировать этот факт, в
результате чего программы перестают работать под Windows и вообще начинают
вытворять забавные вещи.
Так как PHP был написан целиком на Си, а Си использует трансляцию символов пе-
ревода строк, то описанная техника работает и в PHP. Однако тут есть один очень
опасный момент. Дело в том, что разработчики PHP в официальной документации к
функции fopen() старательно умалчивают о том, что интерпретатор может работать
с файлами в режиме трансляции символа перевода строки. Так вот, я возьму на
себя
смелость заявить, что такая возможность в действительности существует, а тесты
подтвердили, что ее можно корректно использовать как в Windows и MacOS, так и в
Unix. Подробнее об этом мы поговорим при рассмотрении функции
|
|