Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Открытие и закрытие файлов




 

Прежде чем выполнять операции ввода/вывода с файлом, необходимо открыть его функцией fopen().

Функция fopen() открывает файл (если он существует) и возвращает целое число — так называемый файловый манипулятор (file handle). Синтаксис функции fopen():

int fopen (string файл, string режим [, int включение_пути])

Открываемый файл может находиться в локальной файловой системе, существовать в виде стандартного потока ввода/вывода или представлять файл в удаленной системе, принимаемой средствами HTTP или FTP.

Параметр файл может задаваться в нескольких формах, перечисленных ниже:

Если параметр содержит имя локального файла, функция fopen() открывает этот файл и возвращает манипулятор.

Если параметр задан в виде php://stdin, php://stdout или php://stderr, открывается соответствующий стандартный поток ввода/вывода.

Если параметр начинается с префикса http://, функция открывает подключение HTTP к серверу и возвращает манипулятор для указанного файла.

Если параметр начинается с префикса ftp://, функция открывает подключение FTP к серверу и возвращает манипулятор для указанного файла. В этом случае следует обратить особое внимание на два обстоятельства: если сервер не поддерживает пассивный режим FTP, вызов fopen() завершается неудачей. Более того, FTP-файлы открываются либо для чтения, либо для записи.

При работе в пассивном режиме сервер ЯР ожидает подключения со стороны клиентов. При работе в активном режиме сервер сам устанавливает соединение с клиентом. По умолчанию обычно используется активный режим.

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

 

Таблица 11

Режимы открытия файла

Режим Описание
r Только чтение. Указатель текущей позиции устанавливается в начало файла
r+ Чтение и запись. Указатель текущей позиции устанавливается в начало файла
w Только запись. Указатель текущей позиции устанавливается в начало файла, а все содержимое файла уничтожается. Если файл не существует, функция пытается создать его
w+ Чтение и запись. Указатель текущей позиции устанавливается в начало файла, а все содержимое файла уничтожается. Если файл не существует, функция пытается создать его
a Только запись. Указатель текущей позиции устанавливается в конец файла. Если файл не существует, функция пытается создать его
a+ Чтение и запись. Указатель текущей позиции устанавливается в конец файла. Если файл не существует, функция пытается создать его

 

Если необязательный третий параметр включение_пути равен 1, то путь к файлу определяется по отношению к каталогу включаемых файлов, указанному в файле php.ini.

Ниже приведен пример открытия файла функцией fopen(). Вызов die(), используемый в сочетании с fopen(), обеспечивает вывод сообщения об ошибке в том случае, если открыть файл не удастся:

$file = "userdata.txt"; // Некоторый файл

$fh = fopen($file, "a+") or die("File ($file) does not exist!");

Следующий фрагмент открывает подключение к сайту РНР (http://www.php.net):

$site = "http://www.php.net": // Сервер, доступный через HTTP

$sh = fopen($site., "r"); //Связать манипулятор с индексной страницей Php.net

После завершения работы файл всегда следует закрывать функцией fclose().

Функция fclose() закрывает файл с заданным манипулятором. При успешном закрытии возвращается TRUE, при неудаче — FALSE. Синтаксис функции fclose():

int fclose(int манипулятор)

Функция fclose() успешно закрывает только те файлы, которые были ранее открыты функциями fopen() или fsockopen(). Пример закрытия файла:

 

<?

$file = "userdata.txt";

if (file_exists($file)) {

$fh = fopen($file, "r");

// Выполнить операции с файлом

fclose($fh);

}

else {

echo "File $file does not exist!";

}

?>

Рис.22. Вывод сообщения в случае отсутствия файла

 

Запись в файл

 

С открытыми файлами выполняются две основные операции — чтение и запись.

Функция is_writeable() позволяет убедиться в том, что файл существует и для него разрешена операция записи. Возможность записи проверяется как для файла, так и для каталога. Синтаксис функции is_writeable():

bool is_writeable (string файл)

Одно важное обстоятельство: скорее всего, РНР будет работать под идентификатором пользователя, используемым web-сервером (как правило, «nobody»). Пример использования is_writeable() приведен в описании функции fwrite().

Функция fwrite() записывает содержимое строковой переменной в файл, заданный файловым манипулятором. Синтаксис функции fwrite():

int fwrite(int манипулятор, string переменная [, int длина])

Если при вызове функции передается необязательный параметр длина, запись останавливается либо после записи указанного количества символов, либо при достижении конца строки. Проверка возможности записи в файл продемонстрирована в следующем примере:

<?

// Информация о трафике на пользовательском сайте

$data = "08:13:00|12:37:12|208.247.106.187|Win98";

$filename = "somefile.txt";

// Если файл существует и в него возможна запись

if (is_writeable($filename)):

// Открыть файл и установить указатель текущей позиции в конец файла

$fh = fopen($filename, "a+");

// Записать содержимое $data в файл

$success = fwrite($fh, $data);

// Закрыть файл

fclose($fh); else:

echo "Could not open Sfilename for writing";

endif;

?>

 

Рис. 23. Результат работы программы с записью данных в файл

 

Функция fputs() является псевдонимом fwrite() и может использоваться всюду, где используется fwrite().

Функция fputs() является псевдонимом fwrite() и имеет точно такой же синтаксис. Синтаксис функции fputs():

int fputs(int манипулятор, string переменная [, int длина])

Чтение из файла

 

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

Функция is_readable() позволяет убедиться в том, что файл существует и для него разрешена операция чтения. Возможность чтения проверяется как для файла, так и для каталога. Синтаксис функции is_readable():

bool is_readable (string файл)

Скорее всего, РНР будет работать под идентификатором пользователя, используемым web-сервером (как правило, «nobody»), поэтому для того чтобы функция is_readable() возвращала TRUE, чтение из файла должно быть разрешено всем желающим. Следующий пример показывает, как убедиться в том, что файл существует и доступен для чтения:

if (is_readable($filename)) {

// Открыть файл и установить указатель текущей позиции в конец файла

$fh = fopen($filename, "r");

}

else {

echo "$filename is not readable!";

}

Функция fread() читает из файла, заданного файловым манипулятором, заданное количество байт. Синтаксис функции fwrite():

int fread(int манипулятор, int длина)

Манипулятор должен ссылаться на открытый файл, доступный для чтения (см. описание функции is_readable()). Чтение прекращается после прочтения заданного количества байт или при достижении конца файла. Рассмотрим текстовый файл pastry.txt. Чтение и вывод этого файла в браузере осуществляется следующим фрагментом:

$fh = fopen('pastry.txt', "r") or die("Can't open file!");

$file = fread($fh, filesize($fh));

echo $file;

fclose($fh);

Используя функцию fllesize() для определения размера pastry.txt в байтах, вы гарантируете, что функция fread() прочитает все содержимое файла.

// Текстовый файл pastry.txt

Recipe: Pastry Dough

1 1/4 cups all-purpose flour

3/4 stick (6 tablespoons) unsalted butter, chopped

2 tablespoons vegetable shortening 1/4 teaspoon salt

3 tablespoons water

Функция fgetc() возвращает строку, содержащую один символ из файла в текущей позиции указателя, или FALSE при достижении конца файла. Синтаксис функции fgetc():

string fgetc (int манипулятор)

Манипулятор должен ссылаться на открытый файл, доступный для чтения (см. описание функции is_readable() ранее в этой главе). В следующем примере продемонстрированы посимвольное чтение и вывод файла с использованием функции fgetc():

$fh = fopen("pastry.txt", "r"); while (! feof($fh)):

$char = fgetc($fh);

echo $char; endwhile;

fclose($fh);

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

string fgets (int манипулятор, int длина)

Чтение прекращается при выполнении одного из следующих условий:

  • из файла прочитано длина — 1 байт;
  • из файла прочитан символ новой строки (включается в возвращаемую строку);
  • из файла прочитан признак конца файла (EOF).

Если вы хотите организовать построчное чтение файла, передайте во втором параметре значение, заведомо превышающее количество байт в строке. Пример построчного чтения и вывода файла:

<?

$fh = fopen("somefile.txt", "r");

while (! feof($fh)){

$line = fgets($fh, 4096);

echo $line. "<br>";

}

fclose($fh);

?>

 

Рис.24. Результат чтения содержимого файла

 

Функция fgetss() полностью аналогична fgets() за одним исключением — она пытается удалять из прочитанного текста все теги HTML и РНР:

string fgetss (Int манипулятор, int длина [, string разрешенные_теги])

--Файл science.html

<html>

<head>

<title>Breaking News - Science</title>

<body>

<h1>Alien lifeform discovered</h1><br>

<b>August 20. 2000</b><br>

Early this morning, a strange new form of fungus was found growing in the closet of W. J. Gilmore's old apartment refrigerator. It is not known if powerful radiation emanating from the tenant's computer monitor aided in this evolution.

</body>

</html>

-- Удаление тегов из файла HTML перед отображением в браузере

<?

$fh = fopen("science.html", "r");

while (! feof($fh)):

echo fgetss($fh, 2048);

endwhile;

fclose($fh);

?>

Результат приведен на рис. 25. Из файла science.html были удалены все теги HTML.

В некоторых ситуациях из файла удаляются все теги, кроме некоторых — например, тегов разрыва строк <br>.

-- Выборочное удаление тегов из файла HTML

<?

$fh = fopenC'science.html", "r");

$allowable = "<br>";

while (! feof($fh)) {

echo fgetss($fh. 2048, $allowable);

}

fclose($fh);

?>

Функция fgetss() упрощает преобразование файлов, особенно при наличии большого количества файлов HTML, отформатированных сходным образом.

 

Рис. 25.Результат работы программы по выводу содержимого файла без тегов

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...