logo
Vvedenie_v_Veb_programmirovanien_2 / Vvedenie_v_Veb_programmirovanien_2

Задание 3. Файлы и строки

Файлы могут быть текстовыми, содержащими строки переменной длины и бинарными, представляющими последовательность байт.

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

int fopen (string filename, string mode [, int use_include_path]). Функция осуществляет открытие локального или удаленного файла с именем, указанным в filename, и возвращает его дескриптор (номер). Режим открытия файла mode, может принимать следующие значения:

"r" - файл открывается только для чтения. "r+" - открывается на чтение и на запись. Указатель файла устанавливается в его начало.

"w" - Файл открывается только для записи. Указатель файла устанавливается в его начало. Всё старое содержимое файла теряется, счётчик длины файла устанавливается равным 0. Если файл с указанным именем не существует, функция пытается его создать. "w+" - Файл открывается на чтение и на запись. Указатель файла устанавливается в его начало. Всё старое содержимое файла теряется.

"a" - Файл открывается на добавление (запись). Указатель файла помещается в конец файла. Если файл с указанным именем не существует, функция пытается его создать. "a+" - Файл открывается на чтение и на запись. Вот несколько примеров открытия файлов с помощью fopen()

$fp = fopen ("/home/a/bases.dat", "r");

$fp = fopen ("/home_dir/client/count.txt", "w+");

$fp = fopen ("http://www.yahoo.com/", "r");

В случае успешного завершения функция fopen() возвращает "ссылку" на открытый файл, а в случае ошибки эта функция возвращает булевское значение false.

В РНР имеется возможность удаленного открытия файлов путем указания URL-адреса в качестве параметра $ filename функции fopen (). Осуществлять запись в такие файлы, невозможно, но зато можно читать файлы, расположенные на Web- и FTP-серверах.

Закрытие файла: bool fclose ($fp).

URL, содержащие недопустимые символы (например, пробельные символы в имени файла), необходимо кодировать перед их использованием с помощью функции urlencode (). Функция urlencode () принимает единственный параметр (URL, подлежащий кодированию) и возвращает закодированный URL. Использование функции fореn()

<?php

/* Открыть файл для чтения */

$fr = fopen("myfile.txt", 'г');

/* Открыть бинарный файл для чтения/добавления */

$fr = fopen("myfile.dat", 'ba+');

/* Открыть файл для чтения/записи (искать файл в пути,

заданном директивой include_path)*/

$fr = fopen("code.php", 'w+', true);

/* Открыть файл index.php, для чтения по протоколу HTTP */

$fr = fopen("http://www.php.net/index.php", 'г');

/* Открыть файл index.php, для чтения по протоколу FTP */

$fr = fopen("ftp://ftp.php.net/index.php", 'г');

/*Закодировать URL, затем открыть для чтения по протоколу HTTP */

$url = "http://www.php.net/this is my invalid URL.php";

$url = urlencode($url);

$fr = fopen($url, 'r');

?>

Для работы с текстовыми файлами наиболее часто используются две функции: fgets (), которая извлекает строку из файла, и fputs (), которая записывает строку в файл.

Считывание строки: string fgets ( $fp, $length). Функция возвращает строку длиной до length-1 байт, считанную из файла $fp. Операция чтения завершается либо после загрузки length-1 символов, либо после обнаружения символа конца строки (который включается в возвращаемое значение), либо при обнаружении признака конца файла.

Вот пример построчного вывода на экран, содержимого файла:

<? //pr415

$fp = fopen ("pr415.php", "r");

while (!feof ($fp)) {

$stroka = fgets ($fp, 80);

echo $stroka."<BR>";

}

fclose($fp);

?>

Загрузка строки с пропуском HTML-тего выполняется функцией: string fgetss ($fp, $length [, string allowable_tags]). Функция работает идентично fgets(), за одним исключением: из считанной строки удаляются все HTML-теги, если таковые в ней присутствуют. Есть возможность использовать необязательный третий аргумент, для указания разрешенных тегов, которые удалены не будут.

Альтернативой fgets () является функция fscanf (). :

fscanf ($filename, $format , $var_one [, $var_two ...]]])

где $filename — входной поток, $format задает шаблон для чтения, а $var_one, $var_two представляют собой переменные, в которых сохраняются разобранные фрагменты данных (эти параметры необходимо передавать по ссылке). В случае успешного завершения ввода fscanf () возвращает количество разобранных элементов, а случае ошибки возвращает значение false.

Функция fputs ()служит для записи строки (или любых других данных) в указанный поток и имеет следующийсинтаксис: fputs($filename, $data [, int $length]), где $filename представляет выходной поток, $data содержит записываемые данные, а необязательный параметр $length задает размер фактически записываемых данных.