|
бота с файлами 247
О режиме t нет ни слова в документации PHP (во всяком случае, на момент
написания этих строк), однако, как показывают мои тесты, он работает на всех
системах.
Чтобы проиллюстрировать это, давайте рассмотрим пример сценария. Он будет рабо-
тать по-разному в зависимости от того, в каком режиме мы откроем файл: в бинар-
ном или текстовом. Забегая вперед, замечу, что функция fgets() читает из файла
очередную строку.
Листинг 15.1. Сценарий test.php: работа с текстовыми файлами
// Получает в параметрах строку и возвращает через пробел коды
// символов, из которых она состоит
function MakeHex($st)
{ for($i=0; $i\n";
$f=fopen("test.php","rt"); // текстовый режим
echo MakeHex(fgets($f,100))," \n";
?>
Первая строчка файла test.php состоит всего из двух символов — это < и ?. За
ни-
ми должен следовать маркер конца строки. Сценарий показывает, как выглядит этот
маркер, т. е. состоит ли он из одного или двух символов.
Запустим этот сценарий в Unix. Мы получим две одинаковые строки, которые выво-
дят операторы echo:
3C 3F 0A
3C 3F 0A
Отсюда следует, что в этой системе физический конец строки обозначается одним
символом — кодом 0x0A, или \n (коды 0x3C и 0x3F соответствуют символам < и ?).
В то же время, если запустить сценарий в Windows, мы получим такой результат:
3C 3F 0D 0A
3C 3F 0A
Часть IV. Стандартные функции PHP 248
Как видите, бинарное и текстовое чтение дали разные результаты! В последнем
слу-
чае произошла трансляция маркера конца строки.
Как уже говорилось, можно предварять имя файла строкой http:// или ftp://, при
этом прозрачно будет осуществляться доступ к файлу с удаленного хоста.
В случае HTTP-доступа PHP открывает соединение с указанным сервером, а также
посылает ему нужные заголовки: Host и GET. После чего при помощи файлового де-
скриптора из удаленного файла можно читать обычным образом — например, по-
средством все той же функции fgets().
Если же вы открываете FTP-файл, то в него можно производить либо запись, либо
читать из него, но не и то и другое одновременно. Кроме того, FTP-сервер должен
поддерживать пассивный режим передачи (впрочем, большинство серверов его под-
держивают). Не забудьте также указать логин и пароль, как это сделано в
примерах
ниже.
Дам небольшой совет: не используйте обратные слэши \ в именах файлов, как это
принято в DOS и Windows. Просто забудьте про этот архаизм. Поможет вам в этом
PHP, который незаметно в нужный момент переводит прямые слэши / в обратные
(разумеется, если вы работаете под Windows). Если же вы все-таки не можете
обой-
тись без обратного слэша, не забудьте его удвоить, потому что в строках он
воспри-
нимается как спецсимвол:
$fp = fopen ("c:\\windows\\hosts", "r");
Еще раз предупреждаю: этот способ не переносим между операционными системами
и из рук вон плох. Не используйте его!
Вот несколько примеров:
// Открывает файл на чтение
$f = fopen("/home/user/file.txt", "r") or die("Ошибка!");
// Открывает HTTP-соединение на чтение
$f = fopen("http://www.php.net/", "r") or die("Ошибка!");
// Открывает FTP-соединение с указанием логина и пароля для записи
$f = fopen("ftp://user:[email protected]/", "w") or die("Ошибка!");
Конструкция or die()
Давай
|
|