- •Оглавление
- •Что такое интернет
- •Готовимся к созданию Web-страниц
- •Железо, железо и еще раз железо...
- •Домашняя эргономика — безопасность прежде всего!
- •Программное обеспечение для Web-мастера
- •Выбор хостинга
- •Знакомьтесь — РНР
- •История создания РНР
- •Установка РНР
- •Настройка РНР для Apache
- •Виртуальные хосты в Apache
- •Тестирование РНР
- •Установка и настройка дополнительных модулей
- •Переносимость и совместимость
- •Синтаксис РНР
- •Возможности РНР
- •Работа с базами данных
- •HTTP-аутентификация средствами РНР
- •Работа с изображениями
- •Поддержка закачки файлов
- •Поддержка HTTP-cookie
- •Использование регулярных выражений
- •Обработка ошибок
- •Управление электронными письмами
- •Вывод на экран и переменные в РНР
- •Простейшие арифметические операции
- •Простейшие логические операции
- •Циклы
- •Массивы
- •Работа со строками
- •Сессии
- •Программирование на РНР
- •Сравнение чисел
- •Вложение файлов в документ
- •Простейший счетчик посещений
- •Обработка форм
- •Отправление почты
- •Отправление письма в HTML-формате
- •Дата по-русски
- •Счетчик посещений с использованием базы данных
- •Счетчик персональной посещаемости
- •Сохраняем информацию о посещениях
- •Ах, баннеры, баннеры...
- •Счетчик посещений с выводом информации на экран
- •Счетчик сессий
- •Создание динамического меню
- •«Грабим» странички
- •Голосование на сайте
- •Гостевая книга
- •Технология создания
- •Свой чат — это просто
- •Использование специального привата
- •Интернет-магазин
- •Технология создания
- •Сервисы интернет-магазина
- •Архив рассылок
- •Совет первый: а нужно ли вам это?
- •Совет второй: забудьте все советы
- •Пример системы безопасности
- •HTTP-аутентификация в РНР
- •Защита программы
- •РНР в вопросах и ответах
- •Приложения
- •Приложение 3. Некоторые функции РНР
- •Приложение 4. Cookie
- •Приложение 5. Методы передачи данных POST и GET
- •Приложение 6. Время Unix
Приложения
Приложение 1. Чтотакое HTML и CSS
HTML (HyperText Markup Language) — это язык разметки гипертекста. Что такое «гипертекст»? Это значит, например, то, что текст не простой, а оформлен с помощью специальных тегов. В таком случае любое место текста можно пометить специальной меткой и из другого места этого же документа легко перейти к поставленной метке. Таким образом, все документы могут быть объединены в единое целое, а переходы между документами организовываются очень просто.
У нас тут промелькнуло слово «теги» — предлагаю расшифровать и его. Теги — это специальные метки. Они указывают браузеру пользователя, что именно надо сделать с текстом, картинкой и т.д. Как правило, теги делятся на открывающие и закрывающие. Сделано это для того, чтобы браузер мог узнать зону действия тега.
В качестве примера рассмотрим простой случай — выравнивание текста по центру. Для этого в языке HTML есть тег <center>. Это — открывающий тег. Есть у него и закрывающий тег — </center>. Любой текст, заключенный между этими HTML-те- гами будет выведен по центру экрана. Например:
<center> Этот текст будет выровнен по центру </center>
Можно сформулировать несколько общих правил использования HTML:
•все теги заключаются в угловые скобки < >;
•закрывающий тег идентичен открывающему, только в закрывающем теге перед ключевым словом ставится косая черта (слеш);
206 |
Приложения |
•теги, нуждающиеся в закрытии, обязательно должны быть закрыты;
•теги, как правило, «говорящие», т.е. имеют близкое значению имя.
Запомните эти правила, они вам очень помогут в дальнейшем.
Надо сказать, что не все теги имеют закрывающих «двойников». Некоторые в них просто не нуждаются. К таким относятся, например, тег перевода строки <br>, тег-разделитель <hr>, метатеги (содержащие вспомогательную информацию) и т.д. Если тег не требует завершения, это специально оговаривается.
Вообще список HTML-тегов и их значений нужно смотреть в многочисленных специальных книгах по HTML.
В последнее время при создании сайтов все большую популярность приобретают каскадные таблицы стилей (CSS, Cascading Style Sheets). Их использование позволяет избавиться от многих дизайнерских проблем, часть из которых и вовсе не решалась стандартными средствами HTML.
Приложение2.Самыечастыеошибки
• Самая распространенная — не стоит завершающая оператор точка с запятой. Не ставится она только в конструкции if () {}else{} Основной признак — ошибка в строке, следующей за тем оператором, в котором нет точки с запятой. В окно браузера, если только это разрешено, посылается сообщение об ошибке, имя и путь к файлу, в котором произошла ошибка, и порядковый номер строки. Выглядит это следующим образом:
Parse error: parse error in c:\usr\local\public_html\ host:\virtual\index. phtml on line 2
• При сравнении на равенство двух переменных ставится два знака равенства. Исключений нет. Основной признак — скрипт работает, но не так, как от него ожидается. Найти такую
Приложение 2. Самые частые ошибки |
207 |
|
|
|
|
ошибку бывает порой очень трудно. Ведь сообщения не появляются, так как с точки зрения интерпретатора ошибки нет. Бороться можно только одним способом: внимательно писать сравнения и не забывать об этом правиле.
•В конструкции if () {}else{} отсутствует или стоит лишняя завершающая скобка. Исключений нет. Признак этой ошибки очень простой и позволяет обнаружить ее наличие очень просто. При запуске скрипта интерпретатор выдает ошибку в самой последней строке кода с завершающим тегом ?> Однако найти, где именно не стоит кавычка, бывает непросто. Придется пересмотреть весь код. Иногда меня выручала обычная интуиция — вместо того чтобы искать ошибку, исследуя весь код, я ставил скобку в предполагаемом месте и смотрел, как работает программа. Раза с пятого все получалось.
•Не забывайте про регистрозависимость переменных, например: $user не одно и то же, что и $User. Это совершенно разные переменные. Из-за этого могут возникать самые разные ошибки.
Функции в РНР (как встроенные, так и определенные разработчиком) не подчиняются этому правилу: они регистронезависимы.
• Еще одна распространенная ошибка связана с заголовками.
Как работает браузер с сервером? По специальному протоколу, который называется HTTP (HyperText Transport Protocol, протокол передачи данных в формате HTML, т.е. гипертекста). Когда вы вводите адрес в адресной строке браузера и нажимаете ввод, программа посылает HTTP-запрос серверу, и на этот запрос сервер всегда отвечает, если только он доступен. Первыми в ответе сервера всегда идут так называемые HTTP-заголовки и только потом может идти код страницы. Сервер устроен так, что заголовки посылаются автоматически перед любыми символами, даже перед пробелом. Это значит, что, если хоть один символ передан в браузер, заголовки уже находятся в браузере и вторично послать их никак нельзя. А РНР умеет работать с этими заголовками, используя их при работе, например, с сессиями, cookie и т.д.
208 |
Приложения |
Вот здесь возникает ошибка. Ее текст в окне браузера может выглядеть примерно так:
Warning: Cannot add header information - headers already sent by (output started at /site/name.phtml:3) on line 5.
Эта строка говорит о том, что произошла ошибка отправки заголовков. РНР сообщает, в каком скрипте и в какой его строке(output s t a r t e d at /site/name.phtml:3) произошел вывод информации, из-за которого автоматически послались заголовки. Зная номер строки, очень легко найти и исправить ошибку. Может быть, там HTML-теги, может быть, функция echo, а может, и просто пустая незамеченная строка или пробел перед первым тегом < ?
Очень часто такую ошибку вызывает файл, который подключают при помощи функции include и в котором либо есть какой-то вывод, либо пустая строка после закрывающего РНР-тега. Обнаружить такую ошибку очень трудно. Для решения этой проблемы нужно функцию header () (или session _ start (), или setcookie ()) поместить до вывода любого значения. Просто перенести повыше в скрипте.
Приложение 3. Некоторые функции РНР
Для работы со строками
• addslashes — выделяет строку обратной чертой. Ее синтаксис: s t r i n g addslashes (string s t r ) ; Возвращает строку с обратной чертой перед символами, которые должны быть выделены в запросах к базам данных и т.п. Это символы: ('), двойные кавычки ("), (\) и нулевые значения.
• chop — удаляет повторяющиеся пробелы. Ее синтаксис: string chop (string s t r ) ; Сама строка задается на месте параметра s t r как в самой функции, так и при помощи переменной.
• convert_cyr_string — переводит строку из одной русской кодовой таблицы в другую. Синтаксис команды: string
Приложение 3. Некоторые функции РНР |
209 |
convert_cyr_string(string str, string from, string t o ) ; Аргументы from и to являются одним символом, который определяет исходную и целевую кодовую таблицу. Поддерживаемые типы:
k — koi8-r;
w — windows-1251; i — iso8859-5;
a — x-cp866; d — x-cp866;
m — x-mac-Cyrillic
• echo — выводит на экран одну или более строк. Ее синтаксис: echo {string arg1, s t r i n g [argn] . . .) ; Выводит все параметры. В действительности не является функцией (это языковая конструкция), поэтому не обязательно использовать круглые скобки. Например:
<?
echo "Привет, народ!"; /* выведет фразу "Привет, народ" */?>
<?
echo "Позволяет выводить сложные предложения. Все эти строки будут выведены.";
?>
Еще один пример:
<? $а = 5;
$b= 3; $с = 4;
$d = $а + $b - $с; echo $d;
?>
210 |
Приложения |
В результате на экран будет выведено число 4.
<?
echo "$d";
?>
В результате этого кода будет выведено:
$d
• explode — разбивает строку на подстроки. Ее синтаксис: array explode(string separator, string string [, int limit]); Возвращает массив строк, содержащий элементы, разделенные строкой separator. Необязательный параметр limit задает количество элементов нового массива.
Например:
$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
5pieces = explode(" ", $pizza);
• get_meta_tags — извлекает все содержимое атрибутов метатегов из файла и возвращает в виде массива. Ее синтаксис: array get_meta_tags (string filename, int [use_include_path]) ; Открывает файл filename, обрабатывает его строка за строкой и извлекает метатеги. Например:
<meta name="author" content="name">
<meta name="tags" content="php3 documentation">
Значение свойства name становится ключом, значение свойства content становится значением возвращаемого массива, поэтому вы можете легко использовать стандартные функции для его обработки или доступа к отдельным элементам. Специальные символы в значении свойства заменяются символом '_', остальные переводятся в нижний регистр. Установка параметра use_include_path в 1 приведет к тому, что РНР будет пытаться открыть файл по стандартному пути
include.
Приложение 3. Некоторые функции РНР |
|
211 |
• htmlentities — переводит все возможные символы в коды HTML. Ее синтаксис: string htmlentities (string string); Эта функция идентична htmlspecialchars (), кроме того что все символы, которые имеют соответствующий код HTML заменяются этим HTML-кодом. В настоящее время применяется кодовая таблица ISO-8859-1.
• htmlspecialchars |
— переводит |
специальные символы |
|
в коды |
HTML. Ее синтаксис: string htmlspecialchars |
||
(string |
string) ; |
Определенные |
символы имеют особое |
значение в HTML и должны быть заменены кодами HTML, если они таковые имеют. Эта функция возвращает строки с такими изменениями. Она полезна для отчистки полученного от пользователя текста от разметки HTML (доски сообщений, гостевые книги). В настоящее время осуществляются следующие замены:
& (амперсанд) становится &аmр;
" (двойные кавычки) становится "
<(знак меньше) становится <
>(знак больше) становится >.
Следует отметить, что эта функция не заменяет ничего, кроме указанного выше. Для полной обработки обратите внимание на функцию htmlentities ().
• implode — объединяет массив элементов в строку. Ее синтак-
сис: string implode(array pieces, string glue); Воз-
вращает строку, содержащую совокупность всех элементов массива, в том же порядке со строкой glue между каждым элементом.
Например:
$array = array("lastname", "email", "phone");
$a = implode(",", $array);
echo $a;
?>
212 |
Приложения |
На экран будет выведено:
lastname,email,phone
•join — аналогична implode
•ltrim — удаляет пробелы в начале строки. Ее синтаксис:
string ltrim(string str);
•nl2br — переводит символы перехода строки в HTML-тег разрыва строки. Ее синтаксис: string nl2br (string string); Возвращает string с <br>, вставляемыми перед каждой новой строкой.
•parse_str — разделяет строку на переменные. Ее синтаксис:
void parse_str (string str); Разбивает строку str, как
если бы она была URL-строкой запроса, и устанавливает переменные текущей среды.
Например:
<?php
$str = "first=value&arr[]=foo+bar&arr[]=baz"; parse_str($str) ;
echo $first; // value echo $arr[0]; // foo bar echo $arr[l]; // baz
parse_str {$str, $output) ;
echo $output[`first`]; // выведет value echo $output['arr'][0]; // выведет foo bar echo $output['arr'][1]; // выведет baz
•print — выводит строку. Ее синтаксис: print {string arg) ; Аналогична функции echo.
•rawurldecode — возвращает строку, в которой последова-
тельность символов % и двух шестнадцатеричных цифр заменяется соответствующим буквенным символом. Ее синтаксис:
string rawurldecode(string s t r ) ; Например, строка admin%20log%40name будет заменена admin log@name.
Приложение 3. Некоторые функции РНР |
213 |
• strlen — возвращает длину строки. Ее синтаксис: int strlen(string str); Например:
<?php
$str = "abcdef"; echo strlen($str);
В результате на экран будет выведено «6».
•str_replace — заменяет все указанные строки на заданную последовательность символов. Ее синтаксис: mixed
str_replace(mixed search, mixed replace, mixed subject); Заменяетуказанныекомбинациисимволов search в строке subject на комбинацию replace и возвращает полученную строку или массив.
Например:
<?
$string = "Я ходил в кино";
$strnew = str_replace("кино", "театр", $string);
В результате переменная $strnew будет иметь значение «Я
ходил в театр».
• strcmp — двоичное сравнение строк (безопасное). Ее синтак-
сис: int strcmp(string str1, string str2); Возвращает
<0, если s t r 1 меньше чем str2;. Возвращает > 0, если s t r 1 больше чем str2, и 0, если они равны. Обратите внимание, что это сравнение чувствительно к регистру.
• stripslashes — удаляет слеши из строки. Ее синтаксис:
string stripslashes (string str); Возвращает строку str с вырезанными слешами. (\" заменяется на " и т.д.). Двойные \\ заменяются на \. Например:
<?php
$str = "Вы правнук О\"Генри?"; echo stripslashes ($str);
?>
В результате на экран будет выведено: Вы правнук О'Генри?
214 |
Приложения |
•strrpos — находит позицию последнего появления символа в строке. Ее синтаксис: int strrpos (string haystack, char needle) ; Возвращает номер позиции последнего появления символа needle в строке haystack. Обратите внимание, что needle в этом случае может быть только единственным символом. Если в качестве параметра needle указывается строка, то только первый символ будет использован. Если needle не найден, то возвращается false. Если параметр needle не является строкой, то он переводится в десятичное число и рассматривается как числовое значение символа.
•strrchr — находит последнее появление символа в строке. Ее синтаксис: string strrchr (string haystack, string needle) ; Эта функция возвращает позицию haystack, с которой начинается последнее появление needle и продолжается до конца haystack. Возвращает false, если needle не найден. Если параметр needle содержит более чем один символ, то используется первый символ. Если параметр needle не является строкой, то он переводится в целое число и рассматривается как числовое значение символа. Например:
// получение последней директории в $РАТН $dir = substr( strrchr( $РАТН, ":" ), 1 );
/* получение всех символов до конца строки после последней новой строки */
$text = "Line 1\nLine 2\nLine 3";
$last = substr ( strrchr( $text, 10 ), 1 );
• strrev — переворачивает строку. Ее синтаксис: string strrev(string string); Например:
<?php
echo strrev("Привет, мир! " ) ; ?>
В результате на экран будет выведено:
!рим, тевирП
•strstr — находит первое появление строки. Ее синтаксис: string strstr(string haystack, string needle); Возвращает все haystack с первого появления строки needle
Приложение 3. Некоторые функции РНР |
215 |
и до конца. Если параметр needle не найден, то возвращает false. Если параметр needle не является строкой, то он переводится в целое число и рассматривается как числовое значение символа.
Например:
<?php
$address = "аutc@yandex.ru"; $a = s t r s t r ( $ a d d r e s s , "@"); echo $a;
?>
В результате на экран будет выведено: @yandex.ru
• strtok — разбивает строку на части. Ее синтаксис: string strtok(string arg1, string arg2); Например, строку «This is an example string» можно разбить на отдельные слова, используя пробел в качестве разделителя:
$string = "This is an example string"; $tok = strtok($string," ") ;
while($tok) { echo "Word=$tok<br>"; $tok = strtok(" ");}
В результате на экран будет выведено:
This
is
an
example
string
Обратите внимание, что только первый вызов функции strtok использует строковый аргумент. Для каждого последующего вызова функции strtok необходим только разделитель, так как это позволяет контролировать положение в текущей строке. Чтобы начать сначала или разбить новую строку, вам необходимо просто вызвать strtok с парамет-
216 |
Приложения |
ром строки опять для ее инициализации. Вы можете вставлять несколько разделителей в параметр разделителя. Строка будет разделяться при обнаружении любого из указанных символов. Также будьте внимательны к разделителям, равным 0. Это может вызвать ошибку в определенных выражениях.
• strtolower — переводит строку в нижний регистр. Ее синтаксис: strin g strtolower (string s t r ) ; Возвращает строку strin g со всеми буквенными символами, переведенными в нижний регистр. Помните, что буквенные символы определяются установками сервера на локальном компьютере.
Например:
<?php
$а = "У меня ЕсТь ВКУСНАЯ конфетка"; $а = strtolower($а);
echo $a;
?>
В результате на экран будет выведено:
у меня есть вкусная конфетка
•strtoupper — переводит строку в верхний регистр. Ее синтаксис: string strtoupper(string string); Возвращает
строку strin g со всеми буквенными символами, переведенными в верхний регистр. Следует отметить, что буквенные символы определяются установками сервера на локальном компьютере.
Например:
<?рhр
$а = "У меня ЕсТь ВКУСНАЯ конфетка"; $а = strtoupper $a);
echo $a; ?>
В результате на экран будет выведено:
У МЕНЯ ЕСТЬ ВКУСНАЯ КОНФЕТКА
Приложение 3. Некоторые функции РНР |
217 |
•strt r — переводит определенные символы. Ее синтаксис: string strtr(string str, string from, string to) ; Например: $addr = strtr($addr, "дец", "аао"); Эта функция обрабатывает строку str, заменяя все появления каждого символа из строки from на соответствующие символы в строке to, и возвращает результат. Если строки from и to имеют различную длину, то дополнительные символы более длинной из строк игнорируются.
•substr — возвращает часть строки. Ее синтаксис: string substr(string string, int start, int [length]); Эта функция возвращает часть строки string, определяемую параметрами start (начало) и length (длина). Если параметр start положительный, то возвращаемая строка будет начинаться с символа, находящегося на позиции start строки string. Например:
$rest = substr("abcdef", 1); // вернет "bcdef" $rest = substr ("abcdef", 1, 3); // вернет "bed"
Если параметр start отрицательный, то возвращаемая строка будет начинаться с символа, находящегося на позиции start от конца строки string. Например:
$rest = substr ("abcdef", -1); // вернет "f" $rest = substr("abcdef", -2); // вернет "ef"
$rest = substr("abcdef", -3, 1); // вернет "d"
Если параметр length указан и он положительный, то возвращаемая строка закончится за length символов от начала start. Это приведет к строке с отрицательной длиной (потому что начало будет за концом строки), поэтому возвращаемая строка будет содержать один символ от начала строки start. Если length указан и он отрицательный, то возвращаемая строка закончится за length от конца строки string. Это приведет к строке с отрицательной длиной, поэтому возвращаемая строка будет содержать один символ от начала строки start. Например:
$rest = substr("abcdef", - 1 , -1); // вернет "bede"
218 |
Приложения |
• trim — удаляет пробелы с начала и с конца строки. Ее синтаксис: string trim(string s t r ) ;
• ucfirst — переводит первый символ строки в верхний регистр. Ее синтаксис: string ucfirst (string str) ; Делает заглавным первый символ строки str, если этот символ буквенный. Следует напомнить, что буквенные символы определяются установками сервера на локальном компьютере.
Например:
$а = "привет, мир!"; $а = ucfirst ($foo);
В результате на экран будет выведено:
Привет, мир!
• ucwords — переводит в верхний регистр первые символы каждого слова в строке. Ее синтаксис: string ucwords (string str); Делает заглавным первый символ каждого слова в строке str, если этот символ буквенный.
Например:
$foo = "привет, мир!"; $foo = ucwords($foo);
В результате на экран будет выведено:
Привет, Мир!
Дляработысфайлами
• basename — возвращает из полного пути имя файла. Ее синтаксис: string basename (string path); Получив строку, содержащую путь к файлу, данная функция возвратит основное имя файла. В Windows оба слеша — прямой (/) и обратный (\) — используются как разделители при задании пути. В других окружениях это только прямой слеш (/).
$path = "/home/httpd/html/index.php3";
$file = basename($path); /* $file устанавливается в "index.php3"*/
Приложение 3. Некоторые функции РНР |
219 |
• сору — копирует файл. Ее синтаксис: int copy (string source, string dest) ; Возвращает true при успешном завершении, в противном случае — false. Например:
if (!copy($file, $file.'.bak'))
{
print("при копировании файла $file произошла ошибка...<br>\n");
}
В результате, если при копировании файла $file произойдет ошибка, то на экран будет выведено:
при копировании файла $file произошла ошибка...
• dirname — возвращает путь к директории, в которой расположен файл. Ее синтаксис: string dirname (string path) ; Получив строку, содержащую путь к файлу, данная функция возвратит путь к директории, содержащей файл. В Windows оба слеша — прямой (/) и обратный (\) — используются как разделители при задании пути. В других окружениях это только прямой слеш (/).
Например:
$path = "/etc/passwd";
$file = dirname($path) ; // $file расположен в "/etc"
• fclose — закрывает файловый указатель. Ее синтаксис: int fclose (int fp); Это показывает интерпретатору, что все действия над содержимым файла fp будут прекращены. Возвращает true при удачной операции и false при ошибке. Указатель должен быть действующим и указывать на файл, успешно открытый функциями fopen () или fsockopen ().
• feof — проверяет, находится ли указатель в конце файла. Ее синтаксис: int feof(int fp); Возвращает true, если указатель файла равен EOF (End Of File, конец файла) или при возникновении ошибки. В противном случае возвращает false. Указатель должен быть действующим и указывать на файл, успешно открытый функциями fopen (), рореn () или fsockopen ().
220 |
Приложения |
•fgetc — получает символ из файла. Ее синтаксис: string fgetc(int fp); Возвращает строку, содержащую один символ, прочитанный по файловому указателю fp. При EOF возвращает false. Указатель должен быть действующим и указывать на файл, успешно открытый fopen (), popen (), или fsockopen().
•fgets — получает строку по указателю на файл. Ее синтаксис: string fgets (int fp, int length); Возвращает строку до length — читается по одному байту из файла, указанного
в fp. Чтение заканчивается, если прочитано length символов, или до символов перевода строки и возврата каретки, или до EOF. Один байт прочитается в любом случае. При ошибке возвращает false. Указатель должен быть действующим и указывать на файл, успешно открытый функциями fopen (), popen () или fsockopen ().
•fgetss — получает строку в соответствии со значением файлового указателя и вырезает HTML-теги. Ее синтаксис: string fgetss(int fp, int length); Подобна fgets (), но отличается тем, что удаляет HTML- и РНР-теги из прочитанного текста.
•file — читает и записывает файл в массив. Ее синтаксис: array file {string filename); Каждая строка файла (вместе с символом перехода строки) будет соответствовать элементу массива.
•fileatime — показывает время последнего обращения к файлу. Ее синтаксис: int fileatime (string filename); Возвращает false в случае ошибки.
•filectime — выводит время последнего изменения файла в Unix. Ее синтаксис: int filectime (string filename); Возвращает false в случае ошибки. Работает только для ОС Unix.
•file_exists — проверяет существование искомого файла. Ее синтаксис: int file_exists(string filename); Возвращает true, если файл, определенный в filename, существует; иначе — false. Обратите внимание, что эта функция
Приложение 3. Некоторые функции РНР |
|
221 |
неприменима для работы с удаленными файлами, поскольку файл должен быть доступен через файловую систему сервера.
Например:
<?php
$filename = "/path/to/my.txt";
if (file_exists ($filename) ) { print "Файл $filename существует"; } else {
print "Файл $filename не существует";
}
?>
В результате, если указанный файл существует, на экран будет выведено:
Файл my.txt существует
Если же указанный файл не существует:
Файл my.txt не существует
•filemtime — время последнего изменения файла во всех операционных системах, кроме Unix. Синтаксис команды: int filemtime (string filename) ; Возвращает false в случае ошибки. Например: $filename = "my.txt"; определит время последнего изменения в файле my.txt.
•filesize —размер файла. Ее синтаксис: int filesize (string filename); Возвращает false в случае ошибки.
•filetype — показывает тип файла. Ее синтаксис: string filetype (string filename); Возвращает false. Возможные значения: fifо, char, dir, block, link, file, unknown.
•fopen — открывает файл или URL. Ее синтаксис: int fopen (string filename, string mode); Если filename начинается с " h t t p : //" (без учета регистра), открывается HTTP-соединение с указанным сервером и возвращает указатель файла на открытый файл. В указании директории нужно включать завершающие слеши. Если filename начинается
222 |
Приложения |
с " f t p : / / " (без учета регистра), открывается FTP-соедине- ние с указанным сервером и указатель возвращается на искомый файл. Если сервер не поддерживает режим пассивного FTP, данная операция завершится ошибкой. Вы можете открывать файлы как для чтения, так и для записи через FTP (но не обе операции одновременно). Если filename начинается как-нибудь иначе, открывается файл вашей файловой системы, и указатель возвращается на открытый файл. Если при открытии файла происходит ошибка, функция возвращает false. Параметр mode может принимать следующие значения:
•r — открывает только для чтения, помещает указатель на начало файла;
•r+ — открывает для чтения и для записи, помещает указатель на начало файла;
•w — открывает только для записи, помещает указатель на начало файла и очищает все содержимое файла. Если файл не существует, создает новый файл;
•w+ — открывает для чтения и для записи, помещает указатель на начало файла и очищает все содержимое файла. Если файл не существует, создает новый файл;
•а — открывает только для записи, помещает указатель на конец файла. Если файл не существует, создает новый файл;
•а+ — открывает для чтения и для записи, помещает указатель на конец файла. Если файл не существует, создает новый файл.
Например:
$fp = fopen("/home/rasmus/file.txt", "r"); $fp = fopen("http://www.php.net/", "r");
$fp = fopen("ftp://user:password@example.com/", "w") ;
Если у вас возникают проблемы с чтением и записью в файл при использовании РНР как серверного модуля, помните, что применяемые вами файлы и директории должны быть дос-
Приложение 3. Некоторые функции РНР |
|
225 |
тупными для серверных процессов. На платформе Windows будьте осторожны, избегая обратных слешей в путях, и используйте прямые слеши:
$fp = fopen("c:\\data\\info.txt", "r") ;
•fpassthru — выводит все данные из указателя файла. Ее синтаксис: int fpassthru (int fp) ; Читает до EOF и передает результат на стандартное устройство вывода. При возникновении ошибки возвращает false. Файловый указатель должен быть действующим и указывать на файл, успешно открытый функциями fopen (), popen () или fsockopen ().
•fputs — записывает в файл. Ее синтаксис: int fputs (int fp, string str, int [length]); Функция fputs () аналогична fwrite ().
•fread — производит бинарное чтение файла. Ее синтаксис: string fread (int fp, int length); Читает байты из файла, на который ссылается fp до length. Чтение заканчивается, когда прочитано length байтов или достигнут EOF.
•fseek — производит поиск в файле. Ее синтаксис: int
fseek(int fp, int offset); Для файла fp смещает указатель в потоке байтов на offset байтов. Эквивалентно вызову в языке программирования С функции fseek (fp, offset, SEEK_SET).При удачном выполнении возвращает 0, в противном случае возвращает —1. Поиск после EOF не рассматривается как ошибка. Не используется для файловых указателей, возвращенных функциями fopen(), если путь к файлу начинается "http://" или "ftp://".
• fwrite — производит бинарную запись в файл. Синтаксис: int fwrite(int fp, string string, int [length]); Записывает содержимое string в файловый поток, указанный fp. Если аргумент length присутствует, запись останавливается после записи байта, находящегося на позиции length, или после записи всей строки string. Если есть аргумент length, то соответствующие конфигурационные опции magic_quotes_runtime игнорируются и никакие слеши из string не удаляются.
224 |
Приложения |
•is_dir — проверяет, является ли указанное имя названием директории. Ее синтаксис: bool is_dir (string filename); Возвращает true, если filename существует и является директория.
•is_executable — проверяет, относится ли файл к классу ис-
полнимых. |
Ее синтаксис: bool is_executable (string |
filename) ; |
Возвращает true, если filename существует |
и является исполнимым файлом.
•is_file — проверяет, относится ли файл к классу обычных файлов. Ее синтаксис: bool is_file (string filename); Возвращает true, если filename существует и является обычным файлом.
•is_link — показывает, относится ли файл к символическим ссылкам. Ее синтаксис: bool is_link (string filename) ; Возвращает true, если filename существует и является символической ссылкой.
•is_readable — проверяет, относится ли файл к классу читаемых. Синтаксис команды: bool is_readable (string
filename) ; Возвращает true, если filename существует и является доступным для чтения. Помните, что права доступа определяются именем, под которым пользователь вошел
всистему.
•is_writeable — показывает, относится ли файл к классу за-
писываемых. Ее синтаксис: bool is_readable (string filename); Возвращает true, если файл существует и доступен для записи. Помните, что права доступа определяются именем, под которым пользователь вошел в систему.
• link — создает жесткую ссылку. Ее синтаксис: int link{string target, string link);
• mkdir — создает директорию. Ее синтаксис: int mkdir (string pathname, int mode); Пытается создать директорию, указанную в pathname. Обратите внимание, что если вы захотите указать mode в восьмеричной системе, то число должно начинаться с 0. Например:
mkdir("/path/to/my/dir", 0700);
Приложение 3. Некоторые функции РНР |
225 |
Возвращает true при успешном выполнении.
• pclose — закрывает процесс файлового указателя, запущенный функцией popen (). Ее синтаксис: int pclose (int fp) ; Это дает понять интерпретатору, что все действия над содержимым файла pf будут прекращены. Файловый указатель должен быть действующим и указывать на файл, успешно открытый вызовом popen ().
• readfile — читает файл и записывает его на стандартное устройство вывода. Ее синтаксис: int readfile (string filename) ; Также возвращает количество прочитанных байтов. В случае возникновения ошибки возвращает false и если перед readfile не указана @, то выводится сообщение об ошибке. Если filename начинается с " h t t p : / / " (без учета регистра), открывается HTTP-соединение с указанным сервером и текст ответа выводится на стандартное устройство вывода. В указании директории нужно включать завершающие слеши. Если filename начинается с "ftp: //" (без учета регистра), открывается FTP-соединение с указанным сервером и файл ответа выводится на стандартное устройство вывода. Если сервер не поддерживает режим пассивного ftp, этот вызов завершится ошибкой. Если filename начинается как-нибудь иначе, будет открыт файл вашей файловой системы и его содержимое выведется на стандартное устройство вывода.
•readlink — показывает цель символической ссылки. Ее синтаксис: string readlink (string path); Работает аналогично функции readlink языка С и возвращает содержимое символической ссылки path или 0 в случае ошибки.
•rename — переименовывает файл. Ее синтаксис: int rename (string oldname, string newname) ; Пытается изменить имя файла, указанного в параметре oldname на newname. Возвращает true при успешном выполнении и false при сбое.
•rewind — позиционирует файловый указатель. Ее синтаксис:
int rewind (int fp); Позиционирует файловый указатель для fp на начало потока файла. При возникновении ошибки
226 |
Приложения |
возвращает 0. Файловый указатель должен быть действующим и указывать на файл, успешно открытый функцией
fopen ().
• rmdir — удаляет директорию. Ее синтаксис: int rmdir (string dirname) ; Пытается удалить директорию, путь к которой указан в параметре dirname. Директория должна быть пустой и ее атрибуты должны допускать это. При возникновении ошибки возвращает 0.
•stat — информация о файле. Ее синтаксис: array stat (string filename); Собирает статистику о файле filename и возвращает массив статистической информации, например, с такими элементами:
•device (устройство);
•number of link (номер ссылки);
•user ID owner (ID пользователя или владельца);
•group ID owner (ID группы владельца);
•size in bytes (размер в байтах);
•time of last access (время последнего доступа);
•time of last modification (время последнего изменения);
•number ofblocks allocated (количество занятых блоков) и т.д.
•lstat — выводит информацию о файле или символической ссылке. Ее синтаксис: array lstat (string filename) ; Собирает информацию о файле или символической ссылке
filename. Эта функция подобна stat (), но если параметр filename функции lstat — это символическая ссылка, то возвращает статус символической ссылки, а не статус файла, на который указывает данная ссылка. Возвращает массив статистической информации, с такими же элементами, как
и функция stat.
•symlink — создает символическую ссылку. Ее синтаксис: int symlink(string target, string link) ; Создает символическую ссылку с целью, указанной в параметре target, и именем, заданным в link.
Приложение 3. Некоторые функции РНР |
227 |
•tempnam — создает уникальное имя файла. Ее синтаксис: string tempnam(string dir, string prefix); Создает уникальное имя файла в указанной директории. Если директория не существует, tempnam () генерирует имя файла во временной директории системы. Возвращает новое временное имя файла или нулевую строку при ошибке.
•touch — устанавливает время модификации файла. Ее син-
таксис: int touch(string filename, int time); Пытается установить время модификации файла filename в значение time. Если параметр time отсутствует, используется текущее время. Если файл не существует, то он создается. Возвращает true при успешном выполнении и false в обратном случае.
Для работы с cookie
• setcookie ("name", $data, $y) — записывает в cookie с именем name переменную $data. Переменная $у определяет, до какого времени будет храниться cookie на компьютере пользователя. Значение переменной $у должно быть определено заранее при помощи функции mktime.
• setcookie ("name") — удаляет cookie с именем name. Обратите внимание, что это та же функция, которая устанавливает cookie, однако для того чтобы удалить cookie, атрибуты $data и $у нужно не указывать.
Для работы с сессиями
•session_destroy — уничтожает все данные сессии. Ее синтаксис: bool session_destroy(void) ; Эта функция не удаляет глобальные переменные или cookie, ассоциированные с сессией. Возвращает true при успешном удалении данных, в противном случае — false.
•session_is_registered — проверяет, зарегистрирована ли переменная в текущей сессии. Синтаксис команды: bool session is registered(string name);
228 |
Приложения |
• session_regenerate_id — задает новый ID текущей сессии и сохраняет информацию о текущей сессии. Синтаксис: bool session_regenerate_id(void) ; Возвращает true в случае успешного завершения, false — в случае возникновения ошибки.
•session_register — регистрирует одну или несколько переменных в текущей сессии. Синтаксис команды: bool session_register (mixed name); Возвращает true, если все переменные успешно зарегистрированы в сессии.
•session start — создает сессию или возобновляет текущую, основанную на SID, который вызван запросом при помощи cookie или методов POST И GET. Ее синтаксис: bool session_start (void); Функция всегда возвращает true. Если используются cookie, session_start должна быть
вызвана перед тем, как любая переменная будет послана
вбраузер.
•session_write_close — записывает данные сессии и закрывает ее. Ее синтаксис: void session_write_close (void);
•session_unregister — отменяет регистрацию переменной
сименем name в текущей сессии. Ее синтаксис: bool session_unregister (string name); Возвращает true при
успешной отмене регистрации.
• session_unset — отменяет регистрацию всех переменных текущей сессии. Ее синтаксис: void session_unset (void)
Для работы с массивами
• array_sum — подсчитывает сумму значений массива. Ее синтаксис: mixed array_sum (array array); Возвращает фиксированное значение, т.е. результат ее деятельности не может быть массивом. Например:
$а = array (5,7,10,1) ; echo array_sum($a);
В результате получится 23.
Приложение 3. Некоторые функции РНР |
229 |
• count — подсчитывает количество элементов в массиве. Ее синтаксис: int count (mixed var [, int mode]) ; Возвращает единицу, если переменная не является массивом. Например:
$а[0] = "Hello"; $а[1] = 3; $а[2] = 5;
$а[3] = "World";
$result = count($time); echo $result
В результате на экран будет выведено число 4.
•in_array — проверяет наличие указанной переменной в массиве. Ее синтаксис: bool in_array (mixed needle, array
haystack[,bool s t r i c t ] ) ; Возвращает true, если указанное значение needle найдено в массиве с именем haystack, в противном случае — false. Если в третьем параметре bool s t r i c t установлен атрибут true, то функция проверяет тип переменной needle. Например:
<?
$new = array("Hello", "NTT", "World", "New"); if (in_array ("NTT", $new))
{
print "Значение NTT в массиве $new найдено \п";
}
?>
Функция in_array вернет true, так как искомое значение существует в массиве, а на экране будет выведена строка
"Значение NTT в массиве array найдено"
• end — устанавливает внутренний указатель массива на последнем элементе. Ее синтаксис: mixed end ( array array).
230 |
Приложения |
• next — передвигает внутренний указатель массива в сторону увеличения (т.е. вперед) и возвращает следующий элемент массива от текущей позиции внутреннего указателя массива, или false, если элементов больше нет. Если массив содержит пустые элементы, то эта функция возвратит false и для этих элементов. Ее синтаксис: mixed next ( array array) .
• prev — перемещает внутренний указатель массива в сторону уменьшения индекса (т.е. назад) и возвращает предыдущий элемент массива или false, если перед текущим нет элементов. Если массив содержит пустые элементы, то функция также возвратит false. Ее синтаксис: mixed prev ( array array).
• reset — устанавливает внутренний указатель массива на первом элементе. Ее синтаксис: mixed reset ( array array);
•current — возвращает элемент массива, на который в данный момент указывает внутренний указатель. Ее синтаксис: mixed current ( array array) ; Она не перемещает сам указатель. Если внутренний указатель находится в конце списка элементов, current() возвращает false. Если массив содержит пустые элементы (0 или пустую строку), то функция возвратит false для каждого из них.
•sort — сортирует массив по возрастанию, в том числе по латинскому алфавиту. Ее синтаксис: bool sort ( array array)
Например:
<?php
$animals = array ("dog", "camel", "cat", "giraffe"); sort($animals);
reset($animals);
while (list($key, $val) = each($animals)) { echo "fruits[" . $key . "] = " . $val . "\n";
}
?>
В результате на экран будет выведено:
animals [0] = camel animals [1] = cat
Приложение3.НекоторыефункцииРНР |
231 |
animals [2] = dog animals [3] = giraffe
• rsort — сортирует массив в обратном порядке (по убыванию). Ее синтаксис: bool rsort ( array array) ;
Например:
<?php
$animals = array("dog", "camel", "cat", "giraffe"); rsort($animals);
reset($animals);
while (list($key, $val) = each($animals)) { echo "$key = $val\n";
}
?>
В результате на экран будет выведено:
0 = giraffe
1 = dog
2 = cat
3 = camel
Для работы с датой и временем
•checkdate — проверяет правильность даты/времени. Ее синтаксис: bool checkdate (int month, int day, int year); Возвращает true, если указанная дата правильная, иначе — false.
•date — возвращает время/дату сервера. Ее синтаксис: $date
=date ("параметр") ; Параметров может быть несколько, разделяются они между собой запятой. Допустимы следующие параметры:
•a — может принимать значения "am" или "pm";
•А — "AM" или "PM";
От англ. AM (Ante Meridiem) — до полудня, PM (Post Meridiem) — после полудня. {Примеч. ред.)
232 |
Приложения |
•d — день месяца, цифровой, две цифры (на первом месте ноль);
•D — день недели, текстовой, три буквы, например " F r i " ;
•F — месяц, текстовой, длинный, например "January";
•h — час, цифровой, 12-часовой формат, две цифры;
•H — час, цифровой, 24-часовой формат, две цифры;
•i — минуты, цифровой, две цифры;
•j — день месяца, цифровой, без начальных нулей;
•1 (строчная L) — день недели, текстовой, длинный, например "Friday";
•m — месяц, цифровой;
•М — месяц, текстовой, три буквы, например "Jan";
•s — секунды, цифровой, две цифры;
•S — английский порядковый суффикс, текстовой, два символа, например "th", "nd"1 ;
•U — секунды с начала века Unix, т.е. с 1 января 1970 года;
•Y — год, цифровой, четыре цифры;
•w — день недели, цифровой, "0" означает воскресенье;
•у — год, цифровой, две цифры;
•z — день года, цифровой, например "299".
Обратите внимание, что некоторые параметры имеют различные значения при разном регистре, например d и D.
•mktime — возвращает временную метку Unix, которая является целым числом, равным количеству секунд между точкой отсчета Unix (1 января 1970 года) и указанным временем. Ее
синтаксис: |
int mktime (int |
hour, i n t |
minute, i n t |
second, i n t |
month, i n t day, |
i n t year) ; |
Например: |
Имеются в виду суффиксы порядковых числительных в английском языке, например second (второй), seventh (седьмой). (Примеч.ред.)
