Мировые информационные ресурсы. Лекция 4. Работа с файлами

1.

Мировые информационные ресурсы
Лекция 4. Работа с файлами

2.

Проверка существования и
размера файла
Функция filе_ехists( )
- проверяет, существует ли заданный файл. Если файл
существует, функция возвращает TRUE, в противном
случае возвращается FALSE.
Синтаксис:
file_exists (файл)
Пример:
if (! file_exists ($filename)) :
print "File $filename does not exist!";
endif:
2

3.

Проверка существования и
размера файла
Функция is_file( )
- проверяет существование заданного файла и
возможность выполнения с ним операций чтения/записи.
Синтаксис:
is_file(файл)
Пример:
$file = "somefile.txt";
if (is_file($file)) :
print "The file $file is valid and exists!";
else :
print "The file $file does not exist or it is not a valid file!";
endif:
3

4.

Проверка существования и
размера файла
Функция filesize( )
- возвращает размер (в байтах) файла с заданным
именем или FALSE в случае ошибки.
Синтаксис:
filesize(имя_файла)
Пример:
$fs = filesize("test.txt");
print "Файл /"test.txt/" занимает на диске $fs байт.";
4

5.

Открытие и закрытие файлов
Функция fopen( )
- открывает файл (если он существует) и возвращает
целое число — так называемый файловый дескриптор
(file handle).
Синтаксис:
fopen (файл, режим [, включение_пути])
Пример:
$file = fopen("c:/wwwdocs/file.txt","r");
if(!file)
{ echo("Ошибка открытия файла"); }
Если параметр включение_пути равен 1, то путь к файлу
определяется по отношению к каталогу включаемых
5
файлов, указанному в файле php.ini.

6.

Открытие и закрытие файлов
fopen(файл, режим [, включение_пути])
Если открываемый файл
находится в локальной файловой системе, то параметр файл
содержит имя локального файла, функция fopen( ) открывает этот
файл и возвращает дескриптор.
существует в виде стандартного потока ввода/вывода, то
параметр файл задан в виде php://stdin, php://stdout или
php://stderr, открывается соответствующий стандартный поток
ввода/вывода.
представляет файл в удаленной системе, принимаемой
средствами HTTP или FTP, то параметр файл начинается
- с префикса http://, тогда функция открывает подключение HTTP
к серверу и возвращает дескриптор для указанного файла,
- с префикса ftp://, тогда функция открывает подключение FTP к
серверу и возвращает дескриптор для указанного файла. При
этом, если сервер не поддерживает пассивный режим FTP, вызов
fopen( ) завершается неудачей. По умолчанию обычно
используется активный режим.
Кроме того, FTP-файлы открываются либо для чтения, либо для
6
записи.

7.

Открытие и закрытие файлов
fopen(файл, режим [, включение_пути])
Параметр режим определяет возможность выполнения чтения и записи в файл.
Режим
r
Описание
Только чтение. Указатель текущей позиции устанавливается в начало
файла
r+ Чтение и запись. Указатель текущей позиции устанавливается в
начало файла
w
Только запись. Указатель текущей позиции устанавливается в начало
файла, а все содержимое файла уничтожается. Если файл не
существует, функция пытается создать его
w+ Чтение и запись. Указатель текущей позиции устанавливается в
начало файла, а все содержимое файла уничтожается. Если файл не
существует, функция пытается создать его
a
Только запись. Указатель текущей позиции устанавливается в конец
файла. Если файл не существует, функция пытается создать его
a+ Чтение и запись. Указатель текущей позиции устанавливается в конец
файла. Если файл не существует, функция пытается создать его
b
Флаг, указывающий на работу (чтение и запись) с двоичным файлом;
7
указывается только в Windows.

8.

Открытие и закрытие файлов
fopen(файл, режим [, включение_пути])
Пример:
$file = "userdata.txt"; // Некоторый файл
$fh = fopen($file, "a+") or die("File ($file) does not exist!");
Пример:
$site = "http://www.php.net":
// Сервер, доступный через HTTP
$sh = fopen($site, "r");
страницей Php.net
//Связать дескриптор с индексной
Пример:
$file = fopen("c:/wwwdocs/picture.jpg","rb");
if(!file)
{ echo("Ошибка открытия файла"); }
8

9.

Открытие и закрытие файлов
Функция fclose( )
- закрывает файл с заданным дескриптором. При успешном
закрытии возвращается TRUE, при неудаче — FALSE.
Синтаксис: fclose(дескриптор)
Функция fclose( ) успешно закрывает только те файлы, которые
были ранее открыты функциями fopen( ) или fsockopen( ).
Пример:
$file = "userdata.txt";
if (file_exists($file)) :
$fh = fopen($file, "r");
// Выполнить операции с файлом
fclose($fh);
else :
print "Файл $file не существует!";
Endif;
9

10.

Перемещение по файлу
При чтении данных из файла указатель текущей позиции
перемещается к очередному непрочитанному символу.
Функция rewind()
- Установка указателя текущей позиции в начало файла
Синтаксис:
rewind (дескриптор)
Функция ftell()
- Возвращает положение указателя файла.
Синтаксис:
ftell (дескриптор)
10

11.

Перемещение по файлу
Функция fseek()
Синтаксис:
fseek(дескриптор, смещение, отсчет=SEEK_SET)
Устанавливает указатель файла на байт со смещением (от начала
файла, от его конца или от текущей позиции, в зависимости от
параметра отсчет).
Параметр отсчет задает с какого места отсчитывается смещение
$offset. В PHP для этого существуют три константы, равные,
соответственно, 0, 1 и 2:
SEEK_SET - устанавливает позицию начиная с начала файла;
SEEK_CUR - отсчитывает позицию относительно текущей позиции;
SEEK_END - отсчитывает позицию относительно конца файла;
В случае использования последних двух констант параметр смещение
может быть отрицательным.
В случае успешного завершения функция возвращает 0, а в случае
неудачи -1.
11

12.

Перемещение по файлу
Функция feof()
- Указатель конца файла.
Синтаксис:
feof(дескриптор файла)
Возвращает true, если достигнут конец файла (то есть
если указатель файла установлен за концом файла).
12

13.

Перемещение по файлу
Пример:
$f=fopen("myfile.txt","r");
while(!feof($f)) {
$str=fgets($f); # Обрабатываем очередную строку $str }
fclose($f);
Пример:
$file = fopen ("file.txt","r");
if ($file) {
$counter = 0;
while(!feof($file))
{
$str = fgets ($file);
$counter++; }
echo($counter);
fclose ($file); }
else
{ echo("Ошибка открытия файла"); }
13

14.

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

15.

Запись в файл
Пример:
// Информация о трафике на пользовательском сайте
$data = "08:13:00|12:37:12|208.247.106.187|Win2003";
$filename = "somefile.txt";
// Если файл существует и в него возможна запись
if ( is_writeable($filename) ) :
// Открыть файл и установить указатель текущей позиции в конец файла
$fh = fopen($filename, "a+");
// Записать содержимое $data в файл
$success = fwrite($fh, $data);
// Закрыть файл
fclose($fh);
else :
print "Невозможно открыть файл $filename для записи.";
endif;
15

16.

Чтение из файла
Функция is_readable( )
- позволяет убедиться в том, что файл существует и для него
разрешена операция чтения. Возможность чтения проверяется как
для файла, так и для каталога.
Синтаксис:
is_readable (файл)
Пример:
if ( is_readable($filename) ) :
// Открыть файл и установить указатель текущей позиции в конец
файла
$fh = fopen($filename, "r");
else :
print "$filename is not readable!";
endif;
16

17.

Чтение из файла
Функция fread( )
- читает из файла, заданного файловым дескриптором, заданное
количество байт. Синтаксис:
fread(дескриптор, длина)
Дескриптор должен ссылаться на открытый файл, доступный для
чтения.
Чтение прекращается после прочтения заданного количества байт
или при достижении конца файла.
Пример:
$fh = fopen('text.txt', "r") or die("Can't open file!");
$file = fread($fh, filesize($fh));#ф-ция filesize гарантирует прочтение
всего содержимого файла.
print $file;
fclose($fh);
17

18.

Чтение из файла
Функция fgetc( )
- возвращает строку, содержащую один символ из файла в текущей
позиции указателя, или FALSE при достижении конца файла.
Синтаксис:
fgetc (дескриптор)
Дескриптор должен ссылаться на открытый файл, доступный для
чтения.
Пример: посимвольное чтение и вывод файла:
$fh = fopen("text.txt", "r");
while (! feof($fh)) :
$char = fgetc($fh):
print $char;
endwhile;
fclose($fh);
18

19.

Чтение из файла
Функция fgets( )
возвращает строку, прочитанную от текущей позиции указателя в
файле, определяемом файловым дескриптором. Файловый
указатель должен ссылаться на открытый файл, доступный для
чтения.
Синтаксис:
fgets (дескриптор, длина)
Чтение прекращается при выполнении одного из следующих
условий:
из файла прочитано длина — 1 байт;
из файла прочитан символ новой строки (включается в
возвращаемую строку);
из файла прочитан признак конца файла (EOF).
19

20.

Чтение из файла
Пример: построчное чтение и вывод файла:
$fh = fopen("text.txt", "r");
while (! feof($fh));
$line = fgets($fh, 4096);
print $line. "<br>";
endwhile;
fclose($fh):
20

21.

Чтение из файла
Функция fgetss( )
- полностью аналогична fgets( ) за одним исключением — она
пытается удалять из прочитанного текста все теги HTML и РНР:
fgetss (дескриптор, длина [, разрешенные_теги])
Пример: Файл example.html
<html><head><title>PHP</title></head>
<body><h1>Основы PHP</h1>
<p><b>Переменные </b>
<p>В РНР переменные начинаются со знака доллара ($). За этим
знаком может следовать любое количество буквенно-цифровых
символов и символов подчеркивания, но первый символ не может
быть цифрой или подчеркиванием. Следует также помнить, что
имена переменных в РНР чувствительны к регистру, в отличие от
ключевых слов.
</body></html>
21

22.

Чтение из файла
Пример скрипта:
$fh = fopen("example.html", "r");
while (! feof($fh)) :
print fgetss($fh, 2048);
endwhile;
fclose($fh);
Вывод:
PHP Основы PHP Переменные В РНР переменные начинаются со
знака доллара ($). За этим знаком может следовать любое
количество буквенно-цифровых символов и символов
подчеркивания, но первый символ не может быть цифрой или
подчеркиванием. Следует также помнить, что имена переменных в
РНР чувствительны к регистру, в отличие от ключевых слов.
22

23.

Чтение файла в массив
Функция file( )
- загружает все содержимое файла в индексируемый массив.
Каждый элемент массива соответствует одной строке файла.
Синтаксис:
file (файл [, включение_пути])
Если параметр включение_пути равен 1, то путь к файлу
определяется по отношению к каталогу включаемых файлов,
указанному в файле php.ini.
23

24.

Чтение файла в массив
Пример:
$file_array = file("text.txt");
while ( list( $line_num, $line ) = each($file_array ) ):
print "<b>Line $line_num:</b> ", htmlspecialchars($line ), "<br>\n"
endwhile;
Каждая строка массива выводится вместе с номером:
Line 0: Первая строка файла
Line 1: Вторая строка файла
Line 2: Третья строка файла
Line 3: Четвертая строка файла
Line 4: Пятая строка файла
Line 5: Шестая строка файла
24

25.

Файлы и потоки
Все операции ввода-вывода в РНР выполняются под потоками.
Функция readfile( )
- читает содержимое файла и направляет его в стандартный вывод
(в большинстве случаев — в браузер). Синтаксис:
readfile (файл [, включение_пути])
- возвращает количество прочитанных байтов. Файл может
находиться в локальной файловой системе, существовать в виде
стандартного потока ввода/вывода или представлять файл в
удаленной системе, принимаемой средствами HTTP или FTP.
Параметр файл задается по тем же правилам, что и в функции
fopen( ).
Пример:
$restaurant_file = "latorre.txt";
readfile($restaurant_filе);
25

26.

Файлы и потоки
Функция popen( )
- открывает однонаправленный поток ввода или вывода к
запускаемой программе. Такие потоки называют также каналами. С
открытым каналом можно работать как с обычным файлом.
Синтаксис:
popen (команда, режим)
Параметр команда определяет выполняемую системную команду.
Параметр режим описывает режим доступа.
26

27.

Файлы и потоки
Пример:
$fh = fopen("spices.txt","w"); # Открыть файл "spices.txt" для записи
// Добавить несколько строк текста
fputs($fh, "Parsley, sage, rosemary\n");
fputs($fh, "Paprika, salt, pepper\n");
fputs($fh, "Basil, sage, ginger\n");
// Закрыть дескриптор
fclose($fh);
// Открыть процесс UNIX grep для поиска слова Basil в файле spices.txt
$fh = popen("grep Basil < spices.txt", "r");
// Вывести результат работы grep
fpassthru($fh);
Результат:
Basil, sage, ginger
27

28.

Файлы и потоки
Функция pclose( )
- закрывает соединение с процессом, заданным дескриптором.
Синтаксис:
pclose (дескриптор}
В параметре дескриптор передается дескриптор, полученный ранее
при успешном вызове рореn( ).
28

29.

Запуск внешних программ
Сценарии РНР могут выполнять программы, находящиеся на
сервере. Такая возможность особенно часто используется при
администрировании системы через браузер, а также для более
удобного получения сводной информации о системе.
Функция ехес( )
- запускает заданную программу и возвращает последнюю строку ее
выходных данных. Синтаксис:
exec (команда [, массив [, возврат]])
Внимание: функция ехес( ) только выполняет команду, не выводя
результатов ее работы. Все выходные данные команды можно
сохранить в необязательном параметре массив.
Если при заданном параметре массив также задается переменная
возврат, последней присваивается код возврата выполненной
команды.
29

30.

Обратные апострофы
Существует другой способ выполнения системных команд, не
требующий вызова функций, — выполняемая команда заключается
в обратные апострофы (` `), а результаты ее работы отображаются в
браузере.
Пример:
$output = `ls`;
print "<pre>$output</pre>";
Этот фрагмент выводит в браузер содержимое каталога, в котором
находится сценарий.
30

31.

Работа с файловой системой
Функция basename( )
- выделяет имя файла из переданного полного имени. Синтаксис:
basename(полное_имя)
Пример:
$path = "/usr/local/phppower/htdocs/index.php";
$file = basename($path); # $file = "index.php"
Функция getlastmod( )
- возвращает дату и время последней модификации страницы, из
которой вызывается функция. Синтаксис:
getlastmod()
Пример:
echo "Last modified: ".date( "H:i:s a", getlastmod( ) );
31

32.

Работа с файловой системой
Функция stat( )
- возвращает индексируемый массив с подробной информацией о файле с
заданным именем. Синтаксис: stat(имя_файла)
В элементах массива возвращается следующая информация:
0 Устройство
1 Индексный узел (inode)
2 Режим защиты индексного узла
3 Количество ссылок
4 Идентификатор пользователя владельца
5 Идентификатор группы владельца
6 Тип устройства индексного узла
7 Размер в байтах
8 Время последнего обращения
9 Время последней модификации
10 Время последнего изменения
11 Размер блока при вводе/выводе в файловой системе
12 Количество выделенных блоков
32

33.

Работа с файловой системой
Пример:
$file - "datafile.txt";
list($dev, $inode, $inodep, $nlink, $uid, $gid, $inodev, $size, $atime, $mtime,
$ctime, $bsize) = stat($file);
print "$file is $size bytes. <br>";
print "Last access time: $atime <br>";
print "Last modification time: $mtime <br>";
Результат:
datafile.txt is 289 bytes.
Last access time: August 15 2007 12:00:00
Last modification time: August 15 2007 10:07:18
33

34.

Копирование, переименование и удаление файлов
Функция сору( )
Синтаксис:
copy (источник, приемник)
Функция сору( ) пытается скопировать файл источник в файл
приемник; в случае успеха возвращается TRUE, а при неудаче —
FALSE.
Если файл приемник не существует, функция сору( ) создает его.
Пример:
$data_file = "datal.txt";
copy($data_file, $data_file'.bak') or die("Could not copy $data_file");
34

35.

Копирование, переименование и удаление файлов
Функция rename( )
- переименовывает файл. В случае успеха возвращается TRUE, a
при неудаче — FALSE. Синтаксис:
rename (старое_имя, новое_имя)
Пример:
$data_file = "datal.txt";
rename($data_file, $datafile'.old') or die ("Could not rename $data_file");
Функция unlink( )
- удаляет файл с заданным именем. Синтаксис:
unlink (файл)
35

36.

Работа с каталогами
Функция dirname( )
— извлекает путь из полного имени файла. Синтаксис:
dirname (путь)
Пример:
$path = "/usr/locla/phppower/htdocs/index.php";
$file = dirname($path);
// $file = "usr/local/phppower/htdocs"
Функция dirname( ) иногда используется в сочетании с переменной
$SCRIPT_FILENAME для получения полного пути к сценарию, из
которого выполняется команда:
$dir = dirname($SCRIPT_FILENAME);
36

37.

Работа с каталогами
Функция is_dir( )
- проверяет, является ли файл с заданным именем каталогом:
is_dir (имя_файла)
Пример:
$isdir = is_dir("index.html"); // Возвращает FALSE
$isdir = is_dir("book"); // Возвращает TRUE
37

38.

Работа с каталогами
Функция mkdir( )
— создает новый каталог. Синтаксис:
mkdir (путь, режим)
Параметр путь определяет путь для создания нового каталога.
Необходимо завершить параметр именем нового каталога.
Параметр режим определяет разрешения, назначаемые созданному
каталогу. Права доступа задаются только для каталогов UNIX,
поскольку в Windows этот аргумент игнорируется.
Пример:
$flag = mkdir ("c:/temp/test", 0700);
if($flag)
{
else
{
echo("Каталог успешно создан"); }
echo("Ошибка создания каталога"); }
38

39.

Работа с каталогами
Функция opendir( )
- открывает дескриптор для работы с каталогом. Синтаксис:
opendir (путь)
Функция closedir( )
- закрывает дескриптор каталога, переданный в качестве параметра.
Синтаксис:
closedir(дескриптор_каталога)
Функция readdir( )
- возвращает очередной элемент заданного каталога. Синтаксис:
readdir(дескриптор_каталога)
Пример: Вывод списка всех файлов и подкаталогов в текущем каталоге:
$dh = opendir( . );
while ($file = readdir($dh)) :
print "$file <br>"; endwhile;
closedir($dh);
3939

40.

Работа с каталогами
Функция chdir( )
— осуществляет переход в каталог, заданный параметром. Синтаксис:
chdir (каталог)
chdir("/tmp/data"); // переход по абсолютному пути
chdir("./js"); // переход в подкаталог текущего каталога
chdir(".."); // переход в родительский каталог
Пример:
$newdir = "book";
chdir($newdir) or die("Could not change to directory ($newdir)");
$dh = opendir(' . ');
print "Files:";
while ($file = readdir($dh)) ;
print "$file <br>";
endwhile;
closedir($dh);
40

41.

Работа с каталогами
Функция rewinddir( )
- переводит указатель текущей позиции в начало каталога, открытого
функцией opendir( ).
Синтаксис:
rewinddir (манипулятор_каталога)
41

42.

Пример
Счетчик обращений
<?
$access = "hits.txt"; // файл, в котором будет храниться значение
счетчика
$visits = &file($access); // чтение содержимого файла в масссив
$current_visitors = $visits[0]; // извлечение первого элемента
++$current_visitors; // Увеличить счетчик обращений
$fh = fopen($access, "w"); // Открыть файл hits.txt и установить
// указатель текущей позиции в начало файла
fwrite($fh, $current_visitors);// Записать новое значение счетчика
// в файл "hits.txt"
fclose($fh); // Закрыть дескриптор файла "hits.txt"
?>
42
English     Русский Правила