Слайд 1Мировые информационные ресурсы
Лекция 4. Работа с файлами
Слайд 2Проверка существования и размера файла
Функция filе_ехists( )
- проверяет, существует
ли заданный файл. Если файл существует, функция возвращает TRUE, в
противном случае возвращается FALSE.
Синтаксис:
file_exists (файл)
Пример:
if (! file_exists ($filename)) :
print "File $filename does not exist!";
endif:
Слайд 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:
Слайд 4Проверка существования и размера файла
Функция filesize( )
- возвращает размер
(в байтах) файла с заданным именем или FALSE в случае
ошибки.
Синтаксис:
filesize(имя_файла)
Пример:
$fs = filesize("test.txt");
print "Файл /"test.txt/" занимает на диске $fs байт.";
Слайд 5Открытие и закрытие файлов
Функция fopen( )
- открывает файл (если
он существует) и возвращает целое число — так называемый файловый
дескриптор (file handle).
Синтаксис:
fopen (файл, режим [, включение_пути])
Пример:
$file = fopen("c:/wwwdocs/file.txt","r");
if(!file)
{ echo("Ошибка открытия файла"); }
Если параметр включение_пути равен 1, то путь к файлу определяется по отношению к каталогу включаемых файлов, указанному в файле php.ini.
Слайд 6Открытие и закрытие файлов
fopen(файл, режим [, включение_пути])
Если открываемый файл
находится
в локальной файловой системе, то параметр файл содержит имя локального
файла, функция fopen( ) открывает этот файл и возвращает дескриптор.
существует в виде стандартного потока ввода/вывода, то параметр файл задан в виде php://stdin, php://stdout или php://stderr, открывается соответствующий стандартный поток ввода/вывода.
представляет файл в удаленной системе, принимаемой средствами HTTP или FTP, то параметр файл начинается
- с префикса http://, тогда функция открывает подключение HTTP к серверу и возвращает дескриптор для указанного файла,
- с префикса ftp://, тогда функция открывает подключение FTP к серверу и возвращает дескриптор для указанного файла. При этом, если сервер не поддерживает пассивный режим FTP, вызов fopen( ) завершается неудачей. По умолчанию обычно используется активный режим.
Кроме того, FTP-файлы открываются либо для чтения, либо для записи.
Слайд 7Открытие и закрытие файлов
fopen(файл, режим [, включение_пути])
Параметр режим определяет
возможность выполнения чтения и записи в файл.
Режим Описание
r
Только чтение. Указатель текущей позиции устанавливается в начало файла
r+ Чтение и запись. Указатель текущей позиции устанавливается в начало файла
w Только запись. Указатель текущей позиции устанавливается в начало файла, а все содержимое файла уничтожается. Если файл не существует, функция пытается создать его
w+ Чтение и запись. Указатель текущей позиции устанавливается в начало файла, а все содержимое файла уничтожается. Если файл не существует, функция пытается создать его
a Только запись. Указатель текущей позиции устанавливается в конец файла. Если файл не существует, функция пытается создать его
a+ Чтение и запись. Указатель текущей позиции устанавливается в конец файла. Если файл не существует, функция пытается создать его
b Флаг, указывающий на работу (чтение и запись) с двоичным файлом; указывается только в 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("Ошибка открытия файла"); }
Слайд 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;
Слайд 10Перемещение по файлу
При чтении данных из файла указатель текущей позиции
перемещается к очередному непрочитанному символу.
Функция rewind()
- Установка указателя текущей позиции
в начало файла
Синтаксис:
rewind (дескриптор)
Функция ftell()
- Возвращает положение указателя файла.
Синтаксис:
ftell (дескриптор)
Слайд 11Перемещение по файлу
Функция fseek()
Синтаксис:
fseek(дескриптор, смещение, отсчет=SEEK_SET)
Устанавливает указатель файла на байт
со смещением (от начала файла, от его конца или от
текущей позиции, в зависимости от параметра отсчет).
Параметр отсчет задает с какого места отсчитывается смещение $offset. В PHP для этого существуют три константы, равные, соответственно, 0, 1 и 2:
SEEK_SET - устанавливает позицию начиная с начала файла;
SEEK_CUR - отсчитывает позицию относительно текущей позиции;
SEEK_END - отсчитывает позицию относительно конца файла;
В случае использования последних двух констант параметр смещение может быть отрицательным.
В случае успешного завершения функция возвращает 0, а в случае неудачи -1.
Слайд 12Перемещение по файлу
Функция feof()
- Указатель конца файла.
Синтаксис:
feof(дескриптор файла)
Возвращает true, если
достигнут конец файла (то есть если указатель файла установлен за
концом файла).
Слайд 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("Ошибка открытия файла"); }
Слайд 14Запись в файл
Функция is_writeable( )
позволяет убедиться в том, что
файл существует и для него разрешена операция записи. Возможность записи
проверяется как для файла, так и для каталога. Синтаксис:
is_writeable (файл)
Функция fwrite( )
записывает содержимое строковой переменной в файл, заданный файловым дескриптором. Синтаксис:
fwrite(дескриптор, переменная [, длина])
Если при вызове функции передается необязательный параметр длина, запись останавливается либо после записи указанного количества символов, либо при достижении конца строки.
Функция fputs( )
- является псевдонимом fwrite( ) и имеет точно такой же синтаксис. Синтаксис:
fputs(дескриптор, переменная [, длина])
Слайд 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;
Слайд 16Чтение из файла
Функция is_readable( )
- позволяет убедиться в том, что
файл существует и для него разрешена операция чтения. Возможность чтения
проверяется как для файла, так и для каталога.
Синтаксис:
is_readable (файл)
Пример:
if ( is_readable($filename) ) :
// Открыть файл и установить указатель текущей позиции в конец файла
$fh = fopen($filename, "r");
else :
print "$filename is not readable!";
endif;
Слайд 17Чтение из файла
Функция fread( )
- читает из файла, заданного
файловым дескриптором, заданное количество байт. Синтаксис:
fread(дескриптор, длина)
Дескриптор должен
ссылаться на открытый файл, доступный для чтения.
Чтение прекращается после прочтения заданного количества байт или при достижении конца файла.
Пример:
$fh = fopen('text.txt', "r") or die("Can't open file!");
$file = fread($fh, filesize($fh));#ф-ция filesize гарантирует прочтение всего содержимого файла.
print $file;
fclose($fh);
Слайд 18Чтение из файла
Функция fgetc( )
- возвращает строку, содержащую один
символ из файла в текущей позиции указателя, или FALSE при
достижении конца файла.
Синтаксис:
fgetc (дескриптор)
Дескриптор должен ссылаться на открытый файл, доступный для чтения.
Пример: посимвольное чтение и вывод файла:
$fh = fopen("text.txt", "r");
while (! feof($fh)) :
$char = fgetc($fh):
print $char;
endwhile;
fclose($fh);
Слайд 19Чтение из файла
Функция fgets( )
возвращает строку, прочитанную от текущей
позиции указателя в файле, определяемом файловым дескриптором. Файловый указатель должен
ссылаться на открытый файл, доступный для чтения.
Синтаксис:
fgets (дескриптор, длина)
Чтение прекращается при выполнении одного из следующих условий:
из файла прочитано длина — 1 байт;
из файла прочитан символ новой строки (включается в возвращаемую строку);
из файла прочитан признак конца файла (EOF).
Слайд 20Чтение из файла
Пример: построчное чтение и вывод файла:
$fh = fopen("text.txt",
"r");
while (! feof($fh));
$line = fgets($fh, 4096);
print $line. "
";
endwhile;
fclose($fh):
Слайд 21Чтение из файла
Функция fgetss( )
- полностью аналогична fgets( ) за
одним исключением — она пытается удалять из прочитанного текста все
теги HTML и РНР:
fgetss (дескриптор, длина [, разрешенные_теги])
Пример: Файл example.html
PHPОсновы PHP
Переменные
В РНР переменные начинаются со знака доллара ($). За этим знаком может следовать любое количество буквенно-цифровых символов и символов подчеркивания, но первый символ не может быть цифрой или подчеркиванием. Следует также помнить, что имена переменных в РНР чувствительны к регистру, в отличие от ключевых слов.
Слайд 22Чтение из файла
Пример скрипта:
$fh = fopen("example.html", "r");
while (! feof($fh)) :
print
fgetss($fh, 2048);
endwhile;
fclose($fh);
Вывод:
PHP Основы PHP Переменные В РНР переменные начинаются со
знака доллара ($). За этим знаком может следовать любое количество буквенно-цифровых символов и символов подчеркивания, но первый символ не может быть цифрой или подчеркиванием. Следует также помнить, что имена переменных в РНР чувствительны к регистру, в отличие от ключевых слов.
Слайд 23Чтение файла в массив
Функция file( )
- загружает все содержимое
файла в индексируемый массив. Каждый элемент массива соответствует одной строке
файла.
Синтаксис:
file (файл [, включение_пути])
Если параметр включение_пути равен 1, то путь к файлу определяется по отношению к каталогу включаемых файлов, указанному в файле php.ini.
Слайд 24Чтение файла в массив
Пример:
$file_array = file("text.txt");
while ( list( $line_num, $line
) = each($file_array ) ):
print "Line $line_num: ", htmlspecialchars($line ),
"
\n"
endwhile;
Каждая строка массива выводится вместе с номером:
Line 0: Первая строка файла
Line 1: Вторая строка файла
Line 2: Третья строка файла
Line 3: Четвертая строка файла
Line 4: Пятая строка файла
Line 5: Шестая строка файла
Слайд 25Файлы и потоки
Все операции ввода-вывода в РНР выполняются под потоками.
Функция
readfile( )
- читает содержимое файла и направляет его в стандартный
вывод (в большинстве случаев — в браузер). Синтаксис:
readfile (файл [, включение_пути])
- возвращает количество прочитанных байтов. Файл может находиться в локальной файловой системе, существовать в виде стандартного потока ввода/вывода или представлять файл в удаленной системе, принимаемой средствами HTTP или FTP. Параметр файл задается по тем же правилам, что и в функции fopen( ).
Пример:
$restaurant_file = "latorre.txt";
readfile($restaurant_filе);
Слайд 26Файлы и потоки
Функция popen( )
- открывает однонаправленный поток ввода или
вывода к запускаемой программе. Такие потоки называют также каналами. С
открытым каналом можно работать как с обычным файлом.
Синтаксис:
popen (команда, режим)
Параметр команда определяет выполняемую системную команду.
Параметр режим описывает режим доступа.
Слайд 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
Слайд 28Файлы и потоки
Функция pclose( )
- закрывает соединение с процессом,
заданным дескриптором. Синтаксис:
pclose (дескриптор}
В параметре дескриптор передается дескриптор, полученный ранее
при успешном вызове рореn( ).
Слайд 29Запуск внешних программ
Сценарии РНР могут выполнять программы, находящиеся на сервере.
Такая возможность особенно часто используется при администрировании системы через браузер,
а также для более удобного получения сводной информации о системе.
Функция ехес( )
- запускает заданную программу и возвращает последнюю строку ее выходных данных. Синтаксис:
exec (команда [, массив [, возврат]])
Внимание: функция ехес( ) только выполняет команду, не выводя результатов ее работы. Все выходные данные команды можно сохранить в необязательном параметре массив.
Если при заданном параметре массив также задается переменная возврат, последней присваивается код возврата выполненной команды.
Слайд 30Обратные апострофы
Существует другой способ выполнения системных команд, не требующий вызова
функций, — выполняемая команда заключается в обратные апострофы (` `),
а результаты ее работы отображаются в браузере.
Пример:
$output = `ls`;
print "
$output
";
Этот фрагмент выводит в браузер содержимое каталога, в котором находится сценарий.
Слайд 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( ) );
Слайд 32Работа с файловой системой
Функция stat( )
- возвращает индексируемый массив
с подробной информацией о файле с заданным именем. Синтаксис: stat(имя_файла)
В
элементах массива возвращается следующая информация:
0 Устройство
1 Индексный узел (inode)
2 Режим защиты индексного узла
3 Количество ссылок
4 Идентификатор пользователя владельца
5 Идентификатор группы владельца
6 Тип устройства индексного узла
7 Размер в байтах
8 Время последнего обращения
9 Время последней модификации
10 Время последнего изменения
11 Размер блока при вводе/выводе в файловой системе
12 Количество выделенных блоков
Слайд 33Работа с файловой системой
Пример:
$file - "datafile.txt";
list($dev, $inode, $inodep, $nlink, $uid,
$gid, $inodev, $size, $atime, $mtime, $ctime, $bsize) = stat($file);
print "$file
is $size bytes.
";
print "Last access time: $atime
";
print "Last modification time: $mtime
";
Результат:
datafile.txt is 289 bytes.
Last access time: August 15 2007 12:00:00
Last modification time: August 15 2007 10:07:18
Слайд 34Копирование, переименование и удаление файлов
Функция сору( )
Синтаксис:
copy (источник, приемник)
Функция сору(
) пытается скопировать файл источник в файл приемник; в случае
успеха возвращается TRUE, а при неудаче — FALSE.
Если файл приемник не существует, функция сору( ) создает его.
Пример:
$data_file = "datal.txt";
copy($data_file, $data_file'.bak') or die("Could not copy $data_file");
Слайд 35Копирование, переименование и удаление файлов
Функция rename( )
- переименовывает файл.
В случае успеха возвращается TRUE, a при неудаче — FALSE.
Синтаксис:
rename (старое_имя, новое_имя)
Пример:
$data_file = "datal.txt";
rename($data_file, $datafile'.old') or die ("Could not rename $data_file");
Функция unlink( )
- удаляет файл с заданным именем. Синтаксис:
unlink (файл)
Слайд 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);
Слайд 37Работа с каталогами
Функция is_dir( )
- проверяет, является ли файл
с заданным именем каталогом:
is_dir (имя_файла)
Пример:
$isdir = is_dir("index.html"); // Возвращает FALSE
$isdir
= is_dir("book"); // Возвращает TRUE
Слайд 38Работа с каталогами
Функция mkdir( )
— создает новый каталог. Синтаксис:
mkdir
(путь, режим)
Параметр путь определяет путь для создания нового каталога. Необходимо
завершить параметр именем нового каталога.
Параметр режим определяет разрешения, назначаемые созданному каталогу. Права доступа задаются только для каталогов UNIX, поскольку в Windows этот аргумент игнорируется.
Пример:
$flag = mkdir ("c:/temp/test", 0700);
if($flag)
{ echo("Каталог успешно создан"); }
else
{ echo("Ошибка создания каталога"); }
Слайд 39Работа с каталогами
Функция opendir( )
- открывает дескриптор для работы с
каталогом. Синтаксис:
opendir (путь)
Функция closedir( )
- закрывает дескриптор каталога, переданный
в качестве параметра. Синтаксис:
closedir(дескриптор_каталога)
Функция readdir( )
- возвращает очередной элемент заданного каталога. Синтаксис:
readdir(дескриптор_каталога)
Пример: Вывод списка всех файлов и подкаталогов в текущем каталоге:
$dh = opendir( . );
while ($file = readdir($dh)) :
print "$file
"; endwhile;
closedir($dh);
Слайд 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
";
endwhile;
closedir($dh);
Слайд 41Работа с каталогами
Функция rewinddir( )
- переводит указатель текущей позиции
в начало каталога, открытого функцией opendir( ).
Синтаксис:
rewinddir (манипулятор_каталога)
Слайд 42Пример
Счетчик обращений
значение счетчика
$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"
?>