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

Лекция Характеристика программного средства(php)

История РНР. Начинать нужно всегда с самого простого, и сейчас я попробую познакомить Вас с программированием на скриптовом языке РНР. РНР (читается как пи-эйч-пи) появился на свет осенью 1994 года, и его создатель – Расмус Лердорф, использовал язык в своих целях, для того, что бы иметь представление о тех людях, которые посещают его сайт и знакомятся с его резюме. По словам автора, РНР был написан буквально за день в промежутках между деловыми встречами. Сначала это была просто невзрачная CGI-оболочка, написанная на языке Perl, и служила она исключительно для специфических целей. Для справки - СGI (Common Gateway Interface) - общий шлюзовой интерфейс, является стандартом, который предназначен для создания серверных приложений HTTP. Такое приложение, которое называют шлюзом или CGI-программой, запускается сервером в реальном режиме времени. Сервер передает запросы пользователя CGI-программе, которая их обрабатывает и возвращает результат своей работы на экран пользователя. Таким образом, посетитель получает динамическую информацию, которая может изменяться в результате влияния различных факторов. Сам шлюз (скрипт CGI) может быть написан на различных языках программирования - C/C++, Fortran, Perl, TCL, Unix Schell, Visual Basic, Apple Script и других подобных языках. Но в случае с РНР, для написания его в первоначальном варианте был выбран язык Perl, как наиболее простой и доступный. В результате дальнейшей эксплуатации выяснилось, что оболочка обладает маленькой производительностью, и автор вынужден был переписать все заново, но уже на языке С, что позволило увеличить скорость работы РНР. Пользователи сервера, где располагался сайт с первой версией РНР, попросили себе такой же инструмент, и хоть автор не предполагал, что кто-то другой будет пользоваться этим языком, довольно быстро РНР перерос в самостоятельный проект, и в начале 1995 года вышла первая известная нам версия продукта. Имя этого первого пакета было Personal Home Page Tools (средства для персональной домашней страницы). На тот момент РНР обладал более чем скромными возможностями. Он имел простейший анализатор кода, который понимал несколько специальных команд, а также разные утилиты для использования на домашней странице, необходимые для построения таких полезных вещей, как гостевая книга, счетчик, чат, системы статистики и тому подобное. К середине 1995 года язык был основательно переработан, появилась обработка форм, были добавлены функции работы с базами данных, и в таком виде вышла вторая версия продукта. Сегодня РНР – это мощный кроссплатформенный набор средств, который располагается на сервере и предназначен для обработки специального кода, встраиваемого в HTML-страницу. Благодаря этому, появляется возможность легко создавать динамические сайты. Файлы, созданные таким образом, хранятся и обрабатываются на сервере, и когда посетитель запрашивает документ с РНР, скрипт обрабатывается не браузером посетителя, как например Java Script, а сервером, и посетителю передаются уже только результаты работы. Точно также работает CGI-программа, написанная на С или Perl. Но в отличии от CGI, код РНР можно встраивать в любое место HTML-странички, что является основным преимуществом по отношению к CGI. А кроме того, сам язык РНР очень прост для изучения, и не требует каких-либо специфических знаний. Например, лично мне вполне хватило опыта, приобретенного лет десять назад на уроках информатики в школе, где мы изучали язык Бейсик на очень модных и дорогих тогда Ямахах. Несмотря на столь радужную характеристику, есть у РНР и недостатки. Стоит отметить довольно медленную (по сравнению с программами на CGI) работу скриптов РНР, а также сложность написания больших и сложных программ. Так или иначе, РНР остается интерпретируемым языком, что непременно ведет к ухудшению производительности в случае очень больших и сложных программ, но для выполнения несложных манипуляций на сайте, РНР – лучший выбор. Недаром к середине 2000 года РНР использовался более чем на 2,5 миллионах сайтов! Особенности РНР. Как и у всякого языка программирования, у РНР есть свой синтаксис. И он очень похож на синтаксис языка С или Perl. Программисты, пишущие на этих языках, смогут освоить РНР буквально за несколько дней. Но даже если Вы никогда не программировали, РНР поддастся Вам легко, и обеспечит базу для перехода на языки более сложного уровня. Все команды достаточно логичны, а правила просты. Синтаксис включает в себя операторы, разделенные между собой точкой с запятой. Одна из основных ошибок начинающих программистов – отсутствие точки с запятой между операторами. К счастью, ошибки в РНР по умолчанию выдаются на экран (в отличии от CGI, где все ошибки записываются в лог-файл), и найти ошибку при определенной внимательности и опыте не составит большого труда. Тем более что умный интерпретатор подскажет номер строки, в котором произошла ошибка. Для программирования на РНР Вам понадобится любой текстовый редактор, но для удобства он должен обеспечивать подсветку синтаксиса и нумерацию строк. Я использую CuteHTML, входящий в комплект поставки неплохого FTP-менеджера CuteFTP последних версий. Редактор очень удобный, без лишних ненужных функций, сам встраивается в контекстное меню, не требует инсталляции и имеет все необходимое для программирования. Еще нам понадобится комплект для работы с РНР. Как правило, используется Apache+PHP, хотя это и не обязательно, подходит любой сервер, например – IIS Microsoft. Но первый вариант бесплатен и имеет большую поддержку документацией (в том числе на русском языке) и форумами, где можно выяснить любой вопрос. Теперь давайте перейдем к делу, и напишем наш первый скрипт. Для того чтобы сервер знал, в каком из файлов есть код РНР, его расширение (файла) нужно сделать либо phtml, либо php3, либо php. Строго говоря, может быть назначено любое расширение, но я рекомендую Вам в целях совместимости всегда использовать phtml. Каждая команда в РНР как правило начинается с "<?php" и заканчивается "?>" (здесь и далее без кавычек). Как Вы помните, несколько команд разделяются точкой с запятой. В любом месте скрипта РНР можно поставить комментарий, начинается он с "/*", а заканчивается – "*/" Если комментарий маленький, и занимает только одну строчку, можно поставить "//" таким образом, легко закомментировать любую строчку до ее конца. Как обычно, пробелы, символы табуляции и перевод строки просто игнорируются, и могут применяться для улучшения читабельности кода РНР. Вывод на экран и переменные в РНР. РНР очень легко позволяет организовать вывод текста на экран. Рассмотрим пример скрипта:   <?php   echo "Привет, мир!";   ?> Этот скрипт может быть расположен в любом месте HTML-документа, и сам по себе он не несет ничего полезного, так как только выводит на экран фразу "Привет, мир!". Но таким образом мы знакомимся с одной из наиболее распространенных команд РНР – вывод информации на экран пользователя. Для того, что бы придать нашему скрипту полезные функции, давайте познакомимся с переменными. Переменная характеризуется именем, типом и значением. Имя может быть любым и включать в себя цифры, буквы английского алфавита, и разрешенные символы (например, символ подчеркивания или тире). По типу переменные делятся на целые, с плавающей запятой и символьные. Значение в соответствии с типом может быть практически любым. Например – переменная a=5. Это говорит нам о том, что имя у переменной – а, тип – целочисленный, значение – 5. Вот еще примеры имен и значений:   <?php   $name = 6;   $h12 = 4.89;   $file_type = "path/index.phtml";   $os = "РНР для всех!";   ?> Как видите, все переменные в РНР (но не только в нем) должны начинаться с символа $, что позволяет интерпретатору безошибочно отличать их от команд РНР. В первой строчке нашего скрипта переменной $name присваивается значение 6, и эта переменная автоматически становится целочисленной. Кстати говоря, заранее описывать тип переменной не требуется, как в языках Pascal или Visual Basic, но хотя разделение на типы чисто условное, каждая переменная автоматически стремится использовать правильный тип, соответственно значению. Вторая строчка кода присваивает переменной $h12 значение 4.89, которое является значением с плавающей запятой. Третья и четвертая строчки кода присваивают своим переменным значения, являющиеся символьными строками. Все, что заключено в кавычки (включая цифры ), будет интерпретировано как символьная строка. Если переменные не определены ранее, но используются, из значение принимается равным либо нулю, либо пустой строке в зависимости от типа. Как и в любом языке, над переменными можно совершать любые арифметические действия, и это не требует присутствия специального оператора. Достаточно указать переменную для результата, знак равенства и перечислить в естественном порядке переменные или значения с необходимыми арифметическими знаками. Пример:   <?php   $a = 5;   $b = 3;   $c = 4;   $d = $a+$b-$c;   echo $d;   ?> Результат работы скрипта – вывод на экран цифры 4. Поддерживаются все арифметические операции и функции, многоуровневые скобки, логические операции, операции увеличения или уменьшения на единицу и многое другое. Кроме того, очень просто и естественно организуется сравнение если – то – иначе. Для этого в РНР применяется конструкция if ( ) { } else { } Есть различные варианты синтаксиса этого оператора, но этот – основной, и самый логичный из всех. (если) if ( условие) (то) { выполняется то, что заключено в кавычки } (иначе) else { выполняется то, что заключено в кавычки } После кавычек ставить точку с запятой, как обычно между операторами, не обязательно. Но внутри кавычек – разделение операторов между собой проводится только через точку с запятой. Допускается вложение нескольких операторов проверки один в один. В этом случае надо быть очень внимательным к количеству закрывающих кавычек, так как при отсутствии даже одной интерпретатор выдаст ошибку кода. Рассмотрим несложный пример:   <?php   $a = 5;   $b = 9;   if ( $a == $b ) { echo $b-$a; } else { echo $b.$a; }   ?> При сравнении на истину применяется два знака равенства для того, чтобы интерпретатор мог без труда отличить сравнение от присваивания. Результат работы скрипта – 95, т.к $a не равно $b, а команда echo $b.$a; (между переменными стоит точка, а не знак арифметической операции) выводит подряд указанные переменные. Неравенство (ложь) обозначается символами !=, допустимы все остальные арифметические и логические символы и операторы (например – or, and, >, <= и т.д.) В РНР есть средства быстрого изменения переменной на единицу в сторону увеличения или уменьшения. Для этого нужно указать имя переменной, и за ним без знака равенства подряд два плюса или минуса соответственно. Например - $a++; - переменная $a будет увеличена на единицу. Поддерживается одновременное присваивание одного значения нескольким переменным - $a = $b = 4; Обе переменных будут равны четырем. Вот еще несколько примеров нестандартых арифметических операций в РНР:   <?php   $b = $a = 5; /* присваиваем значения переменым $a и $b */   $c = $a++; /* последующее увеличение, присваиваем $c начальное значение $a (5)*/   $e = $d = ++$b; /* предварительное увеличение, присваиваем $d и $e увеличенное значение$b (6) */ /* тут и $d и$e равны 6 */   $f = double($d++); /* присвоить удвоенное значение $d до его увеличения, то есть 2*6 = 12, переменной $f */   $g = double(++$e); /* присвоить удвоенное значение $e после его увеличения, то есть 2*7 = 14, переменной g */   $h = $g += 10; /* сначала увеличить значение $g на 10, что дает в результате 24, а затем присвоить это значение переменной $h, что также дает 24 */   ?> Вложения файлов в РНР. Каждый, кто сделал хоть одну страничку в сети, сталкивался с проблемой изменения тех или иных данных на ней. Конечно, это не сложно когда страничек несколько или она одна :-), но если Вы сделали большой сайт, маленькое дополнение (например, в меню) в сотни файлов может превратиться в настоящий кошмар! РНР решает эту проблему в раз, позволяя вкладывать одну страницу в другую. Достигается это с помощью операторов REQUIRE и INCLUDE. После этих операторов в круглых скобках должен стоять путь к вкладываемому файлу. Например – INCLUDE ("text.phtml"). Различие между указанными операторами заключается в том, что REQUIRE подменяется содержимым указанного файла, и может быть использован только один раз, а INCLUDE – вставляет и выполняет содержимое указанного файла, что позволяет применить его несколько раз, например в цикле. В любом случае, при исполнении файла интерпретатор РНР (правильно говорить – парсер) пребывает в состоянии HTML, и для его включения код надо заключить в конструкцию <?php … ?>. Вложения файлов могут происходить только внутри серверного пространства, доступного РНР. Другими словами, Вы не можете использовать в имени файла http://. Достаточно часто встречаются сайты, ссылки которых включают в себя специальные символы - &, ?, %. Все это может быть и результатом работы РНР. Дело в том, что если в конце ссылки добавить ?имя=значение, это значение будет доступно под этим же именем в файле, куда указывает ссылка. Если необходимо добавить несколько имен, они могут быть разделены знаком &. Теперь мы можем сделать сайт, который будет доступен с помощью только одной странички. А всю остальную информацию эта страничка будет выводить на основании полученных по ссылке данных. Вид такой ссылки будет примерно таким: http://имя.ru/index.phtml?link=1 Единица в конце ссылки и есть наш параметр, который будет подставляться в файле index.phtml. Например, вот так:   <html>   …начало файла …   <?php   $url = "";   if ($link == 1) { $url = "name1.phtml"; }   if ($link == 2) { $url = "name2.phtml"; }   if ($link == 3) { $url = "name3.phtml"; }   if ($link == 4) { $url = "name4.phtml"; }   if ($url == "") { $url = "error.phtml"; }   INCLUDE ($url);   ?>   … конец файла …   </html> Обратите внимание, написанный нами код учитывает ситуацию, когда посетитель по разным причинам указал неправильный параметр. В этом случае выводится заранее заготовленная страничка с сообщением об ошибке. Если же параметр соответствует какому либо из файлов сайта, он в код файла index.phtml вкладывается и исполняется. Таким образом, начало и конец остаются одинаковыми, а изменяется только середина. И какие-либо изменения уже не кажутся такими страшными, как раньше. Ведь сделать их надо только в одном файле, а отразится это на всем сайте. Есть и другой путь. Его суть заключается в том, что у РНР есть доступ к так называемым переменным окружения сервера. Одна из этих переменных – запрашиваемый посетителем путь относительно адреса сайта. И этот путь становится нам доступен для использования. В этом случае ссылки у нас будут такого вида: http://имя.ru/index.phtml?patch/name.phtml . Вторая часть ссылки - patch/name.phtml будет нам доступна, если мы считаем параметр $QUERY_STRING. Например так - $add = $QUERY_STRING. Теперь изменим наш головной файл index.phtml, чтобы все работало автоматически. А если запрашиваемый параметр не будет указан (правильно говоря – будет равен пустой строке), чтобы что-то открыть, присвоим переменной $add имя файла, который должен быть открыт как главная страничка. Пусть это будет файл main.phtml. Тогда код будет выглядеть следующим образом:   <html>   …начало файла …   <?php   $add = $QUERY_STRING;   if ($add == "") { $add = "main.phtml"; }   INCLUDE ($url);   ?>   … конец файла …   </html> Как видите, еще проще. Но сразу хочу предостеречь Вас, что этот метод хоть и проще первого, но он открывает путь к получению информации о сервере, где расположен сайт с такой организацией структуры. Злоумышленник, или просто любопытный человек, при наличии определенных обстоятельств и знаний сможет много узнать о Вашем сервере, а это открывает прямой путь к взлому. Так что будьте осторожны и не станьте причиной больших неприятностей. Защититься от подобных проблем можно, но это уже совсем другая история. Пример счетчика посещений на РНР. Если Вы все внимательно прочитали, Вы без труда получите стартовый капитал знаний, и он даст Вам возможность самостоятельно в дальнейшем изучать язык РНР. И в конце я предлагаю Вам познакомиться с кодом скрипта, который позволит организовать на любой из страниц Вашего сайта счетчик посещений. Этот счетчик не будет полнофункциональным, так как имеет достаточно много недостатков, но как пример применения РНР вполне годится. В любом месте Вашей странички (но только там, где это нужно) вставьте следующий код:   <p>Посетителей странички -   <?php   $filename = "counter.dat";   $fp = @fopen($filename,"r");   if ($fp) { $counter=fgets($fp,10); fclose($fp); } else { $counter=0; }   $counter++;   echo $counter;   $fp = @fopen($filename,"w");   if ($fp) { $counter=fputs($fp,$counter); fclose($fp); }   ?></p> В том же каталоге, что и Ваша страничка, создайте файл counter.dat, закачайте его на сервер, и с помощью своего FTP-менеджера измените атрибуты этого файла таким образом, чтобы он был доступен для записи. Обычно нужно установить галочки на всех атрибутах файла. Если Вы этого не сделаете, скрипт будет постоянно выдавать ошибку при попытке записи в файл. Кстати, для того, чтобы этого не происходило, стоит поставить перед командой записи и открытия файла символ @, он отменит вывод сообщения о возникшей ошибке на экран посетителя. Когда атрибуты изменены, обновите Вашу страницу на сервере, и обратитесь к ней по ее адресу в браузере. Вы увидите что там, где Вы вставили код РНР, появляется строка: "Посетителей странички – " и далее число, соответствующее количеству посещений. И никакого следа кода! Он был обработан на сервере в Интернете, а браузеру просто передан результат этого исполнения. Алгоритм этого скрипта очень прост. В первой строке мы присваиваем выбранной переменной имя файла, где будет храниться число посещений. Во второй – открываем соединение с этим файлом для чтения. Дальше проверяем успешность соединения, и если файл существует и он доступен для чтения, считываем из него строку из 10 байт, чего более чем достаточно для счетчика, и закрываем соединение с файлом. Увеличиваем показание счетчика на единицу и выводим его новое значение на экран. На следующем этапе нам нужно записать новое значение счетчика, и для этого мы снова открываем соединение (дескриптор) с файлом, но уже на запись с очисткой содержимого файла. Если оно успешно – записываем туда новое значение счетчика и закрываем дескриптор файла. Вот и все. На этом наше первое знакомство с языком РНР будем считать законченным. Конечно, за кадром осталось еще очень много полезного и интересного но, к сожалению все сразу охватить невозможно. Впрочем, для того и придумали умные люди Сеть, чтобы сделать доступным недоступное. В Интернете есть очень много полезных ресурсов на тему РНР, и при минимальных навыках работы в поисковиках Вы без труда отыщите их. А я посоветую Вам подписаться на рассылку РНР для всех!, в которой регулярно раз в неделю появляются новые статьи, примеры скриптов, есть раздел вопросов-ответов а также много другой полезной информации. Найти форму для подписки и подписаться можно по адресу в сети http://virtual.bresttelecom.by/php. Там же выложены все предыдущие выпуски рассылки. А по адресу http://virtual.bresttelecom.by Вы сможете посмотреть, как все это работает в действии. Все что Вы встретите на этом сайте – сделано на РНР. Чат, форум, частные объявления, система статистики – это только малая часть тех возможностей, что дает нам программирование на языке РНР.

От автора: В данном документе (разделе) собрана полезная информация по функциям php. Этот документ создавался несколькими авторами, поэтому прошу простить нам возможные опечатки и не строгую структуру раздела. Рекомендую ознакомиться с функцией mail, функциями запуска программ, функциями работы со строками и другими.

Основная функция, которая нам, скорее всего, понадобится при работе с файлами - это возможность открытия файлов. Файлы открываются с помощью функции fopen(). Данную функцию можно использовать для открытия любого файла в файловой системе сервера, либо для открытия файла через HTTP или FTP в Интернете:     int fopen(string  filename, string  mode); Как можно предположить, аргумент filename является именем открываемого файла; аргумент mode указывает на режим, в котором должен быть открыт файл: для чтения, для записи или дополнения. Он может иметь одно из следующих значений:    a - Открытие файла только для дополнения. Данные будут дописаны в конец существующего файла; если файл не существует, PHP пытается создать его;    a+ - Открытие файла для дополнения и чтения. Данные будут дописаны в конец файла; если файл не существует, PHP пытается его создать;    r - Открытие файла только для чтения;    r+ - Открытие файла для чтения и записи. Данные будут записаны в начало существующего файла;    w - Открытие файла только для записи. Существующее содержание файла будет урачено. Если файл не существует, PHP пытается его создать;    w+ - Открытие файла для чтения и записи. Существующее содержание файла будет урачено. Если файл не существует, PHP пытается его создать. К этим флагам можно добавить флаг b, указывающий на то, что файл надо обрабатывать, как двоичный, а не как текстовый. Если между двоичными и текстовыми файлами не делается различия, этот флаг просто игорируется. При успешном выполнении функция fopen() возвращает дескриптор файла (file handle) - целое число, позволяющее ссылаться на файл при последующих вызовах функции; при неудаче функция fopen() возвращает false.

Закончив работу с файлом,необходимо его закрыть. Это делается с помощью функции fclose().    int fclose(int  fp); В качестве единственного параметра она принимает дескриптор закрываемого файла и в случае успеха возвращает true, а в случае неудачи - false. Простейшая возможность провести какую-либо операцию с файлом - просто послать содержимое файла в выходной поток. Для этого используется функция fpassthru():    int fpassthru(int  fp); Она принимает единственный параметр - дескриптор файла, возвращенный вызовом fopen(). Функция fpassthru() выполняет чтение с текущей позиции в открытом файле и до его конца. Достигнув конец файла эта функция вызывает его закрытие. Функция fpassthru() возвращает true в случае успеха и false - в случае неудачи.

Иногда нам нужно прочесть только часть данных из файла. В PHP есть несколько функций, позволяющих это сделать. Выбор такой функции зависит от данных, которые мы хотим прочесть. Чтобы прочесть строку из открытого файла, можно воспользоваться функцией fread():    string fread(int  fp,int  length); Эта функция читает строку длиной до length символов из файла с дескриптором fp:    if(!$file=fopen("text.txt","r")){     echo("Невозможно открыть файл");    } else {       $text=fread($file,10);       fclose($file);    } Если конец файла достигнут раньше заданной длины length, возвращается текст вплоть до этого места. Функция fgetc() используется для чтения из файла одного символа:    string fgetc(intfp); Единственный параметр, который принимает эта функция,- это дескриптор открытого файла. Возвращаемое значение является строкой из одного символа, прочтенной из файла, или(если достигнут конец файла) false(пустая строка). Хотя этот метод можно использовать для поочередного прочтения всех симводов из файла, очевидно, что для чтения всего файла он неэффективен. Функция fgets() позволяет прочесть строку заданной длины:    string fgets(int  fp,int  length); Помимо десткриптора файла fp функция fgets() принимает в качестве аргумента количество символов (плюс один), которые надо прочесть из файла. Обратите внимание, что параметр length на единицу больше фактического количества прочтенных символов, а также на то, что чтение завершится, если будет достигнут символ перевода строки или конец файла, поэтому реальное количество возвращенных символов нельзя предсказать. Функция возвращает строку или false, если произошла ошибка. Функция fgetss() идентичнаfgets(), но все теги HTML и PHP удаляются из строки. Заметьте, что все теги все же учитываются в длине строки, поэтому, если вы вызовете функцию    $text=(fgetss($file,11));    где $file начинается со строки    <P>These tags will be stripped off<P> значением $text будет "These t", а не "<P>These t". Наконец, для чтения содержимого файла можно использовать функцию file(), которая возвращает содержимое файла в виде массива. Каждая строка файла будет представлена одним элементом массива(первая строка будет нулевым элементом):    array file(string  filename); Обратите внимание, что функция принимает в качестве аргумента строку с именем файла, а не целочисленный дескриптор файла. Запись в файлы осуществляется аналогичным образом. Для записи строки в файл используются функции fputs() или fwrite(). Их вызов совершенно идентичен:    int fputs(int  fp, string  string,int(length));     int fwrite(int  fp, string  string,int(length)); Параметрами служат: дескриптор файла, в который осуществляется запись, строка, записываемая в файл, и(необязательно) количество символов строки, которое нужно записать. В случае успеха функции возвращают true, в случае неудачи - false.

Нам требуется способ перемещения текущей позиции в файле, чтобы иметь возможность чтения или записи по заданному положению в файле. В PHP это достигается благодаря ряду функций. Простейшей функцией является rewind(). Она устанавливает текущую позицию в начало файла:    int rewind(int  fp); Единственным параметром здесь является дескриптор соответствующего файла. Возвращаемым значением является true в случае успеха и false - в случае неудачи. Для перемещения на заданную позицию в файле используется функция fseek(): int fseek(int fp, int offset); Аргумент fp является дескриптором файла;offset является чилом байт или символов от начала файла. Обратите внимание, что fseek() возвращает 1 при ошибке, а в случае успеха -0. В PHP4 fseek() принимает необязательный третий аргумент, который может иметь следующие значения:SEEK_SET(offset отсчитывается от начала файла), SEEK_CUR(offset отсчитывается от текущей позиции в файле) и SEEK_END(offset прибавляется к концу файла). Нам может также понадобиться узнать текущую позицию в файле. Это можно сделать с помощью функции ftell():     int ftell(int  fp); Она просто возвращает позицию в файле с дескриптором fp. Другой полезной функцией является функция feof(), которая указывает, находится текущая позиция в конце файла или нет:     int feof(int  fp); Она возвращает true, если текущая позиция в файле с дескриптором fp находится в конце файла, или происходит ошибка. В противном случае возвращается false. Эта функция обычно используется при циклическом проходе по файлу.

Помимо чтения и записи в файлы в PHP можно производить над ними более фундаментальные операции: копировать их из одного каталога в другой, полностью удалять их или давать им новые имена. Для копирования файла используется функция copy():     int copy(string  source,string  destination); Она копирует файл с именем, указанным в аргументе source, в место, указанное в аргументе deatination. Как и можно ожидать, true возвращается в случае успеха, false - в случае неудачи. Чтобы сохранить резрвную копию файла в каталог /temp/, параллельный текущему каталогу, эту функцию можно использовать таким образом:    $filename="text.txt";    copy($filename,"../temp/".$filename); Если требуется удалить файл навсегда, можно воспользоваться функцией unlink()    int unlink(string  filename); Она удаляет указанный файл и возвращает true в случае успеха и false- в случае ошибки. Для переименования файла используется функция rename()    int rename(string  oldname, string   newname); Она изменяет имя файла oldname на заданное в аргументе newname. Функция возвращает true в случае успеха и false - в случае ошибки.

Перед тем, как удалять или переименовывать файлы, неплохо было бы убедиться в том, что мы точно представляем, с каким файлом имеем дело. PHP предоставляет ряд функций, которые возвращают информацию о данном файле. Во-первых, хотелось бы убедиться, что данный файл существует. Для этого можно использовать функцию file_exists()     int file_exists(string  filename); Параметром этой функции является имя проверяемого файла. Функция возвращает true, если файл существует, и false- в противном случае. Также может потребоваться проверить размер или тип файла. Для этого в PHP есть функции filesize и filetype:    int filesize(string  filename); Эта функция возвращает размер указанного файла в байтах или false в случае ошибки. Функция filetype() возвращает строку, указывающую тип данного файла:     string filetype(string  filename); Возвращаемое значение может быть false в случае ошибки или одним из следующих строковых значений:    "fifo"-объект является FIFO(именованным каналом);    "char"- объект является символьным устройством;    "dir"- объект является каталогом;    "block"- объект является блочным устройством;    "link"- объект является символической ссылкой;    "file"- объект является обычным файлом;    "unknown"- тип файла невозможно определить. Кроме функции filetype() есть еще несколько функций, которые можно использовать для определения принадлежности файла к определенному типу. Этими функциями являются:     Boolean is_dir(string  filename);    Boolean is_executable(string  filename);    Boolean is_file(string  filename);    Boolean is_link(string  filename); Эти функции возвращают true, если указанный файл является каталогом, исполняемым файлом, обычным файлом и символической ссылкой, соответственно. Существуют также две функции, указывающие, возможны ли чтение и запись в файл:    Boolean is_readable(string  filename);    Boolean is_writeable(string  filename);

Простейшей из функций для работы с целыми каталогами является функция chdir(), устанавливающая текущий каталог:    int chdir(string  directory); Она делает указанный каталог текущим. В PHP есть четыре функции, которые можно использовать для просмотра данного каталога. Во-первых, требуемый каталог нужно открыть:    int opendir(string  path); Функция opendir() открывает каталог, путь к которому указан в ее единственном аргументе, и возвращает "дескриптор каталога", представляющий собой целое число, которое можно использовать для ссылки на открытый каталог при последующих вызовах функций. Открыв каталог, можно читать находящиеся в нем "записи":    string readdir(int   dir_handle); Эта функция возвращает имя очередной записи в каталоге. Единственным параметром является дескриптор каталога, полученный от функции opendir(). Если записей больше нет или дескриптор каталога недействителен, функция возвращает false. Поэтому эту функцию можно использовать в операторе while() для просмотра всех записей в каталоге. Когда будет достигнут конец, будет возвращено false. Однако, при этом осуществляется перемещение по каталогу только в одном направлении. Для перемещения по каталогу от конца к началу используется функция rewinddir():    void rewinddir(int  dir_handle); Параметром функции является дескриптор каталога, полученный из вызова opendir(). Эта функция устанавливает текущую запись на первую запись в каталоге, поэтому можно начать сначала. Завершив работу с каталогом, его можно закрыть и освободить ресурсы:    void closedir(int  dir_handle); Снова единственный параметром является дескриптор каталога.

Также можно изменять саму структуру каталогов, создавая и удаляя каталоги. Для создания каталога используется функция mkdir():    int mkdir(string  pathname, int  mode); Первый параметр является именем пути для создаваемого каталога, второй указывает права доступа к каталогу в UNIX(в Windows этот параметр игнорируется), обычно задаваемые в виде восьмеричного числа (начинающегося с нуля). Возвращаемым значением является true, если вызов функции был успешен,и false- в противном случае. При наличии необходимых прав можно удалить каталог из сценария PHP. Для этого в PHP есть функция rmdir():    int rmdir(string  dirname); Обратите внимание, что эта функция удаляет только пустые каталоги.

Вывод текста

echo (string arg1, string [argn]...) Выводит все параметры ("печатает" в стандартный буфер вывода stdout содержимое переменных или иных переданных вами параметров. В нашем случае, как правило, вывод происходит в генерируемую html страницу, начиная с текущей позиции). Примечание: По большому счёту, echo( ) вовсе не функция, а языковая конструкция. В зависимости от того, как вы хотите передать параметры, можно ставить или не ставить круглые скобки. Рассмотрим несколько примеров:

echo "Hello World";

// Можно выводить переменные внутри фразы.

// Пояснения этой загадочной фразы в разделе строки.

$foo="foobar";

$bar="barbaz";

// Отличие одинарных кавычек от двойных узанайте

// щёлкнув здесь.

echo "foo is $foo"; // foo is foobar

//если использовать апострофы вместо кавычек

echo 'foo is $foo'; // foo is $foo

//при выводе нескольких переменных

echo $foo; // foobar

echo $foo,$bar; // foobarbarbaz

Вообще-то вы и сами легко справитесь с познанием echo( ), поэтому более подробной информации не привожу. (В Perl аналогом данной функции является фнукция print)