Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПОКС.doc
Скачиваний:
13
Добавлен:
04.12.2018
Размер:
536.58 Кб
Скачать

46. Работа с файлами в php

Открытие файла

Работа с файлами в PHP очень напоминает работу с файлами в Си. То есть, сначала файл открывается в нужном режиме, при этом возвращается некоторое целое число. Следующим этапом идет собственно работа с самим фалом (чтение, запись...) Последним этапом есть закрытие файла. Некоторое программисты утверждают, что файл можно не закрывать, так как PHP автоматически закрывает все открытые файлы по завершению сценария. Это всё правда, но лично я вам рекомендую закрывать самим фалы, воспринимайте это как хороший стиль кодинга.

fopen ($filename, $mode, $use_other_path=false)

Итак, мы открываем файл $filename в режиме $mode. Лично я очень редко использую третий параметр $use_other_path, он означает, что если не указан относительный путь к файлу, его нужно искать среди путей используемых конструкциями include и require.

Пред вами список значений, которые может принимать параметр $mode:

r - Файл открывается только для чтения. Если файла не существовало, будет ошибка. После удачного открытия файла указатель устанавливается в начало файла.

r+ - файл открывается одновременно и на чтение и на запись. Указатель устанавливается на начало. Если файла не существовало, возвращается false. Ахтунг, если в момент записи указатель установлен где-то посередине файла, то данные запишутся поверх уже существующих.

w- Создаётся новый пустой файл. Если на момент вызова уже существовал такой файл, то он уничтожается.

w+ - аналогичен r+, но если файла не существовало он создается. Можно работать как в режиме записи так в режиме чтения. Если файл существовал, то его содержимое уничтожается.

а- открывает существующий фал в режиме записи и при этом двигает указатель на последний байт файла. Этот режим используют, когда нужно что-то дописать. Вызов проваливается если файла не существовало.

а+ - открывает файл в режиме чтения и записи. Указатель устанавливается в конец файла при этом, не уничтожая содержимое файла. Отличается от а тем, что ели до вызова файла не существовало, то он создается.

В конце любой из строк r,w,a,r+,w+,a+ может находиться ещё один символ- "b" или "t". Если указан "b", то файл открывается в режиме бинарного чтения/записи. Если "t", устанавливается режим трансляции символа перевода строки. О режиме "t" нет ни слова в документации, но поверим Дмитрию Котерову, который утверждает, что этот режим работает во всех системах.

Всё это можно продемонстрировать на примере:

<?

/* Получает в параметрах строку и возвращает через пробел

коды символов, из которых она состоит */

function makehex($st)

{

for($i=0; $ireturn join (" ",$hex);

}

# открываем файл разными способами

$f= fopen("test.php","r");

echo makehex(fgets($f,100))."\n";

$f= fopen("test.php","rt");

echo makehex (fgets($f,100))."\n";

?>

Не используйте обратные слэши в именах файлов. Если вы работаете в Windows, то эти слэши будут автоматически переведены в нормальные. Если вы просто не можете обойтись без обратного слэша, не забудьте удвоить его, так он воспринимается как спецсимвол.

Конструкция or die().

($f=fopen("/homa/user/file.txt","r")) or die ("error");

Если файл не открылся, то ошибка. Всё довольно просто. Стоит заметить, что or нельзя заменить на "|", потому что последний имеет более высокий приоритет.

Безымянные временные файлы.

Довольно часто нам необходимо занести какую-то информацию во временное хранилище. Не скажу, что для реализации повседневных задач подойдёт способ создания временных файлов, но... Для этого умные дядьки- разработчики PHP придумали функцию tmpfile(). Эта функция создает новый файл, доступный для чтения и записи, с уникальным именем. Далее можно будет работать только с файловым дескриптором, имя файла недоступно. Место, занимаемое временным файлом, освобождается сразу после закрытия файла или завершении работы сценария.

Закрытие файла.

Как я (и не только я ) говорил, после работы с файлом его желательно закрыть. Делается это функцией fclose($fp). Эта функция закрывает файл, открытый функцией fopen() (или аналогичными функциями). Возвращает false, если закрыть файл не удалось. Вы ВСЕГДА должны закрывать FTP- и HTTP - соединения.

Блочные чтение/запись.

fread($f, $numberbytes);

Читает из файла $f $numberbytes символов и возвращает строку этих символов. Если $numberbytes больше чем чем можно считать, то возвращается то что удалось.

fwrite($f, $st);

Запсывает в файл $f содержимое строки $st. В некоторых клинических случаях функции fread() и fwrite() можно использовать для копирования файлов.

Построчные чтение/запись.

fgets($f, $dlina);

Считывает из файла одну строку, заканчивающиюся символом новой строки \n. На первый взгляд это очень полезная функция. котороая позволяет пройтись по стркам в файле. Но по моему скромному мнению (что радует, так это то, что в этом я не одинок) более рационально использовать функцию file().

fputs($f, $st);

Аналогична функции fwrite().