<?
// Получает в параметрах строку и возвращает через пробел коды
// символов, из которых она состоит
function MakeHex($st)
{ for($i=0; $i<strlen($st); $i++) $Hex[]=sprintf("%2X",ord($st[$i]));
return join(" ",$Hex);
}
// Открываем файл разными способами
$f=fopen("test.php","r"); // бинарный режим
echo MakeHex(fgets($f,100)),"<br>\n";
$f=fopen("test.php","rt"); // текстовый режим
echo MakeHex(fgets($f,100)),"<br>\n";
?>
Первая строчка файла test.php состоит всего из двух символов — это < и ?. За ними должен следовать маркер конца строки. Сценарий показывает, как выглядит этот маркер, т. е. состоит ли он из одного или двух символов.
Запустим этот сценарий в Unix. Мы получим две одинаковые строки, которые выводят операторы echo:
3C 3F 0A
3C 3F 0A
Отсюда следует, что в этой системе физический конец строки обозначается одним символом — кодом 0x0A, или \n (коды 0x3C и 0x3F соответствуют символам < и ?). В то же время, если запустить сценарий в Windows, мы получим такой результат:
3C 3F 0D 0A
3C 3F 0A
Как видите, бинарное и текстовое чтение дали разные результаты! В последнем случае произошла трансляция маркера конца строки.
Как уже говорилось, можно предварять имя файла строкой http:// или ftp://, при этом прозрачно будет осуществляться доступ к файлу с удаленного хоста.
В случае HTTP-доступа PHP открывает соединение с указанным сервером, а также посылает ему нужные заголовки: Host и GET[E65] . После чего при помощи файлового дескриптора из удаленного файла можно читать обычным образом — например, посредством все той же функции fgets().
Если же вы открываете FTP-файл, то в него можно производить либо запись, либо читать из него, но не и то и другое одновременно. Кроме того, FTP-сервер должен поддерживать пассивный режим передачи (впрочем, большинство серверов его поддерживают). Не забудьте также указать логин и пароль, как это сделано в примерах ниже.