Сегодня: Четверг
5-е Марта
2026-го года.
Сейчас: 20:24
 

N1

N1  
 
Тут находиться копия текста из книги Джанет`a Валейд`a. с использованием на практике сценариев.

Глава 4 Глава 5 Глава 6 Глава 7 Глава 8 Глава 9

Глава 4

Использование переменных в сценариях РНР

В этой главе...

Имена переменных
Присваивание значений переменным
Удаление переменных
Использование констант
Обработка ошибок

 

Переменные (variable) — это контейнеры, в которых содержится информация. Сначала задается имя переменной, а затем в этой переменной можно хранить информацию. Например, можно назвать переменную $age и записать в нее число 21. После присваивания переменной некоторого значения эту переменную можно использовать в сценарии.

При использовании языка РНР для Web, переменные зачастую применяются для хранения информации, которую пользователи вводят в формах HTML, например имени пользователя. Тогда эту переменную можно использовать в сценарии или даже создать персональную Web-страницу с отображением имени пользователя, например "Приветствую Вас, Сергей Петренко"

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

Имена переменных к оглавлению

Имена переменных, или идентификаторы, должны быть осмысленными. Автору приходилось встречать сценарии, где все переменные назывались $var1, $var2, $var3 и т.д. Переменные, конечно, можно называть подобным образом, но если спустя какое-то время вы вернетесь к этому сценарию, у вас могуг возникнуть проблемы с выяснением смысла каждой переменной. Интерпретатор РНР не будет затрудняться или путаться, но люди, которые попытаются разобраться в сценарии, вынуждены будут тратить лишнее время. Делайте ваши сценарии как можно проще для понимания, используя осмысленные имена переменных, например $firstName, $directory_name или $DateOfBirth.

Приведем основные правила именования переменных.

    Все имена переменных начинаются с символа доллара ($).Этот символ в языке РНР означает начало имени переменной.
Имена переменных могут быть любой длины.
    Имена переменных могут включать только буквы, цифры и символы подчеркивания.
    Имена переменных должны начинаться с буквы или символа подчерки­ вания. Они не могут начинаться с цифры.
    Символы верхнего и нижнего регистров различаются.Имена $favoritecity и $Favoritecity означают разные переменные. Если информация хранится в переменной $FavoriteCity, вы не сможете позже в сценарии получить доступ к этой информации, используя имя переменной $favoriteCity.

Приведем примеры допустимых имен переменных:
$_name
$first_name
$name3
$name_3

Следующие имена переменных приведут к генерации сообщений об ошибках:
$3name
$name?
$first+name
$first.name

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

Выбор имени переменной зависит от личных предпочтений. Чаще всего для создания осмысленных имен переменных используется символ подчеркивания или прописные букны. Эти наиболее популярные стили формирования имен переменных проиллюстрированы на следующем примере:
$first_name
$firstName

Описание переменных на основе одного из двух приведенных стилей облегчает чтение сценариев. Обычно имя начинается с символа нижнего регистра. Однако главное правило выбора имен переменных — их согласованность. Выберите стиль и используйте его во всем сценарии

Присваивание и отображение значений переменных к оглавлению

Переменные могут содержать числа или строки символов. Переменная может существовать или не существовать, содержать или не содержать информацию. Причем это не одо и то же. Даже если переменная в настоящее время не содержит никакой информации, она может существовать так же, как существует полка шкафа, даже если она пуста. Конечно, если переменная содержит информацию, она должна существовать.

В следующих разделах рассказывается о том, как создавать переменные и работать с их значениями.

Создание переменных

Переменная автоматически создается при сохранении в ней некоторой информации.

Чтобы задать значение переменной, нужно использовать знак равенства (=) . Например, следующие четыре оператора РНР присваивают значения переменным:
$аge = 21;
$price = 20.52;
$temperature =-5;
$name = "Кларк Кент";

Обратите внимание, что в этих примерах числа не заключены в кавычки, а имя, которое является строкой символов, — заключено. Кавычки в РНР свидетельствуют о том, что символы входят в состав строки, обрабатываемой интерпретатором РНР как отдельная единица. Без кавычек интерпретатор РНР не будет знать, что символы образуют строку, и будет неправильно их обрабатывать. Различные типы данных и особенности их использования будут подробно обсуждаться в Главе 5.

Всякий раз, когда значение присваивается несуществующей переменной, эта переменная создается. Например, предположим, что в начале сценария используются следующие операторы РНР:
$color = "синий";
$color = "красный";

Первый оператор создает переменную и присваивает ей значение " синий". Следующая инструкция изменяет значение переменной $color на " красный".

Значение одной переменной можно присваивать другой переменной, как показано в следующих примерах:
$name1 = "Салли";
$name2 = "Сюзан";
$favorite_name = $name2;

После выполнения этих операторов в переменной $favorite_name будет содержаться значение "Сюзан".

Можно создать переменную, не присваивая ей никакого значения. Например, следующая инструкция создает переменную:
$city = "";

Теперь переменная существует, но не содержит никакого значения. Более подробная информация о типах данных и особенностях их использования содержится в Главе 5 .

Отображение значений переменных

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

<? $today = "Воскресенье";
print_r($today); ?>
Воскресенье

Значение можно также отобразить и с помощью оператора echo.

<? $age = 21;
echo $age; ?>
21

Использование оператора echo указанного вида приводит к тому же результату, что и применение функции print_r. Однако оператор echo позволяет сделать гораздо больше. С его помощью можно вывести несколько элементов, включая числа и строки. Например, предположим, что в переменной $name содержится значение Кларк Кент. Вы можете включить в HTML-файл следующую строку:

<? $name = "Кларк Кент" ?>
<p> Добро пожаловать, <?php echo $name?></p>

Добро пожаловать, Кларк Кент

Если вы попытаетесь использовать несуществующую переменную, то будет сгенерировано предупреждение. Например, предположим, что вы хотите вывести значение переменной $age, но допустили ошибку:

<? echo $aeg ;

?>
PHP Notice: Undefined variable: aeg

В этом сообщении (Notice) говорится о том, что вы используете неопределенную переменную. Такое сообщение в данном случае полезно, поскольку позволяет точно определить строку с опечаткой. Однако в некоторых случаях при написании кода может использоваться несуществующая переменная, и это не будет опечаткой (такая переменная может быть задана преднамеренно). Например, такой подход можно использовать в условном операторе (условные операторы будут описаны в Главе 7). Сценарий при этом будет работать как положено, и предупреждение в этом случае будет совсем ни к чему. Эту проблему можно решить, добавив перед именем переменной символ @. Если вы хотите, чтобы предупреждение не отображалось, используйте следующий синтаксис:
echo @$aeg;

Таким образом, можно отключить вывод сообщения об ошибках. Поэтому, несмотря на то, что переменная не существует, команда echo не отобразит никакой информации.

Не отключайте сообщения об ошибках, которые вы не понимаете. Убедитесь, что вы понимаете сущность ошибки и уверены, что это не приведет к неправильной работе приложения. Сообщение об ошибке указывает на то, что в сценарии содержится некорректность, которую нужно исправить. Это может быть опечатка в имени переменной, как в предыдущем примере.
Многие языки программирования требуют, чтобы перед использованием переменные были описаны. В этих языках использование переменной без ее описания — неустранимая ошибка, при наличии которой сценарий прекращает выполняться. Однако РНР не требует этого, что может несколько смутить специалистов, имеющих опыт программирования на языке Java или С.

Создание первого сценария с переменными

Сценарий, приведенный в главе 3, отображает на Web-странице приветствие, используя простую инструкцию echo. В этом разделе мы тоже создадим сценарий, отображающий приветствие, но с использованием переменной. В сценарии из главы 3 для вывода приветствия используется следующий фрагмент кода на РНР:
<?php
echo "<р>3дравствуй, мир! </р>";
?>

Приведем полный текст сценария, содержащий раздел РНР с переменной и отображающий приветствие "Здравствуй, мир!":
<html>
<head> <title>Сценарий с использованием переменной</title></head>
<body>
<?php
$salutation = "Здравствуй, мир!";
echo "<p> $salutation </p>";
?>
</body>
</HTML>

Если этот сценарий загрузить в браузер, на Web-странице отобразится приветствие
Здравствуй, мир!

Переменная сохраняет свое значение в процессе выполнения всего сценария, а не только в отдельном РНР-разделе. Если переменной присвоить значение 5 в начале сценария, то и в конце сценария значение этой переменной будет равно 5 (если, конечно, вы не присвоите ей нового значения). Например, следующий сценарий содержит два отдельных РНР раздела:
<html>
<head><title>Сценарий с использованием переменной</title></head>
<body>
<?php
$salutation = "Здравствуй, мир!";
echo "<p> $salutation </p>";
?>
<р>Это раздел HTML</p>
<?php
echo "<p>$salutation еще раз</р>";
?>
</body>
</HTML>

Если URL-адрес этого сценария указать в браузере, то на Web-странице отобразится следующая информация:
Здравствуй, мир!
Это раздел HTML
Здравствуй, мир! еще раз

Более подробно об операторах вывода

Как упоминалось в главе 3, оператор echo имеет следующий формат:
echo элемент_вывода1,элемент_вывода2,элемент_выводаЗ,...

Вместо любого элемента вывода можно использовать переменную. Например, можно создать такой РНР-раздел:

<?php
$first_name = "Кларк";
$last_name = "Кент";
echo "Меня зовут ",$first_name," ",$last_name;
?>
Меня зовут Кларк Кент

Обратите внимание на пробел между переменными $first_name и $last_name. Если не добавить этот пробел, эти две переменные будут выводиться слитно.

Для получения желаемого вывода операторы, содержащие несколько переменных, должны удовлетворять определенным правилам форматирования. В табл. 4.1 показаны некоторые операторы echo, которые содержат переменные, а также результаты их использования. В таблице в операторах echo используются следующие значения переменных:
$number = 123;
$wordl = "Здравствуй,";
$word2 = "мир!";

Обратите внимание, что во второй строке таблицы между двумя переменными отсутствует пробел, поэтому нет никакого пробела и при выводе. В третьей строке между значениями переменных отображается пробел.
Таблица 4.1. Операторы echo c переменными

Оператор echo Результат вывода
echo $number; 123
echo $word1,$word2; Здравствуй,мир!
echo $word1," ",$word2; Здравствуй, мир!
echo $wordl $word2; Неверно, потому что имена переменных не отделены друг от друга
запятыми. Это приведет к генерации сообщения об ошибке
echo "$word1 $word2 снова"; Здравствуй, мир! снова

В некоторых операторах echo интерпретатор РНР не может отделить имя переменной, если сразу за ним следует текст. В подобных случаях имя переменной необходимо заключать в фигурные скобки. Например, предположим, что в сценарии используются следующие строки:
$type = "bird";
echo "Keep the $typecage clean";

Вместо желаемого результата будет получено следующее сообщение:
Notice: Undefined variable: typecage

После уведомления о проблеме будет выведен такой текст:
Keep the clean

Для того чтобы этот код работал правильно, необходимо использовать оператор echo следующего формата:

<? $type = "bird";
echo "Keep the {$type}cage clean"; ?>
Keep the birdcage clean

Использование переменных переменных

РНР позволяет использовать динамические имена переменных, получившие название переменных переменных. Переменную можно описать, используя значение, сохраненное в другой переменной, т.е. одна переменная может содержать имя другой переменной. Предположим, например, что вы хотите создать переменную $city со значением Лос-Анджелес. Для этого можно использовать следующий синтаксис:
$name_of_the_variable = "city";

В этой строке создается переменная, содержащая имя, которое можно назначить другой переменной. Для этого необходимо использовать операторы
$$name_of_the_variable = "Лос-Анджелес";

Обратите внимание на дополнительный символ доллара в начале имени переменной. Это и есть обозначение переменной переменной. Этот оператор создает новую переменную, именем которой является значение, содержащееся в переменной $name_of _the_variable:
$city = "Лос Анджелес";

Значение переменной $name_of_the_variable при этом не изменится.

Следующий пример иллюстрирует особенности работы с такими переменными. Операторы приведенного сценария вряд ли окажутся очень полезными, поскольку можно придумать лучший вариант решения данной задачи. Истинное преимущество переменных переменных становится понятным, когда они используются с массивами и циклами. Эти вопросы обсуждаются в главах 6 и 7.

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

<? $Reno = 360000;
$Pasadena = 138000;
$cityname = "Reno";
echo "Население $cityname - ${$cityname}"."\n";
$cityname = "Pasadena";
echo "Население $cityname - ${$cityname}"; ?>
Население Reno - 360000
Население Pasadena - 138000

Обратите внимание, что в операторе echo имена переменных необходимо заключать в фигурные скобки. Без использования фигурных скобок вы получите совсем другой результат.

Удаление переменных к оглавлению

Удалить информацию из переменной можно с помощью оператора
$age =__;

Этот оператор удаляет значение переменной $age. Причем это не означает, что теперь переменная $age установлена в значение 0. Это лишь значит, что переменная $age не содержит никакой информации. Технически это означает, что значением $age является строка нулевых символов. Если вы попытаетесь вывести значение $age на экран с помощью инструкции echo, то на экран ничего не выведется. (Сообщение об ошибке при этом тоже не выводится.)

Переменную можно удалить и следующим образом:
unset($age);

После выполнения этого оператора переменная $age больше не будет существовать. Если вы попробуете вывести ее с помощью оператора echo, то получите сообщение об ошибке "undefined variable" (неопределенная переменная). Таким образом, можно одновременно удалить несколько переменных:
unset($age, $name, $address);

Работа с константами к оглавлению

Константы подобны переменным. Константам дают имена и присваивают значения. Однако константы являются постоянными; их значения не могут быть изменены в сценарии. После того как значение константы установлено, оно уже не меняется. Если ввести константу для обозначения погоды и установить для нее значение "солнечная", то впоследствии изменить это значение нельзя.

Создание констант

Константы описываются с помощью оператора define. Общий формат этого оператора таков:
define (" имя_константы" , " значение_константы");

Например, чтобы создать константу weather, используйте следующий синтаксис:
define("weather", "солнечная");

Эта команда создает константу с именем weather и значением солнечная.

При описании констант, как и при объявлении переменных, нужно использовать осмысленные имена. Однако, в отличие от переменных, имена констант не начинаются со знака доллара. В соответствии с негласным соглашением константам присваивают имена, состоящие из прописных букв латинского алфавита, чтобы их можно было легко отличать от пeременных. Однако в языке РНР можно использовать и символы нижнего регистра.

Константа может содержать строку или число. Следующий оператор создает константу с именем INTEREST и присваивает ей значение .01:
define("INTEREST",.01);

Константам нельзя давать имена, которые являются ключевыми словами РНР. Ключевые слова— это имена операторов РНР, например echo. Их нельзя использовать в качестве имен констант, потому что интерпретатор РНР обрабатывает их как команды PHP-сценария, а не как константы. РНР позволит описать константу с именем ECHO, не выдавая сообщения об ошибке, но при использовании такой константы возникнут проблемы. Например, если написать оператор вида
echo ECHO;

интерпретатор РНР запутается и выведет сообщение об ошибке. Он рассматривает константу как начало следующего оператора echo, но не может найти аргументы, чтобы завершить первую инструкцию echo.

В набор ключевых слов РНР включены следующие:

and as break case
class const continue declare
default die do echo
else empty eval exit
for foreach function global
if include list new
or print require return
switch use var while
Если вас беспокоит некоторый код, который выглядит хорошо, но отказывается корректно работать даже после многочисленных изменений, попробуйте изменить имя константы. Возможно, проблема состоит в том, что в качестве имени константы используется какое-то ключевое слово. Такое случается редко, но все же случается.

Следует отметить, что ключевые слова вполне можно использовать в качестве имен переменных, поскольку имена переменных начинаются с символа $. Однако лучше этим не пользоваться, так как такой стиль может запутать пользователей, которые будут работать с этим сценарием в дальнейшем

Когда использовать константы

Если вы знаете, что значение какой-либо переменной не будет изменяться на протяжении всего сценария, рационально использовать для его хранения константу. Применение константы позволяет выбрать длинное осмысленное имя и сделать сценарий более ясным. Например, название PRODUCT_COST более понятно, чем число 20.50.

При использовании константы ее значение можно установить только один раз — в начале сценария. Если это значение когда-либо понадобится изменить, то при использовании константы это можно сделать только в одном месте, а не изменять значение переменной в двадцати различных местах сценария. Одна замена лучие, чем двадцать. Такой подход очень удобен и ускоряет работу.

Использование константы гарантирует, что данное значение не будет случайно изменено где-либо в сценарии.

Предположим, имеется сценарий, который переводит значения из одной валюты в другую, умножая количество долларов на обменный курс. Например, если курс обмена доллара США на канадский доллар составляет 1.52, можно записать следующий код:
<?php
$US_dollars = 20.00;
$CA_dollars = $US_dollars * 1.52;
?>

Теперь предположим, что этот сценарий содержит 40 000 строк кода и что доллары США в нем конвертируются в канадские доллары в 50 различных местах. Значит, приведенный выше код встречается в 50 различных местах. Вы понимаете, что обменный курс изменяется практически каждую неделю, значит, каждую неделю вам придется редактировать этот сценарий, вручную изменяя число 1.52 на другое значение в 50 различных местах. Согласитесь, что это очень утомительно.

Гораздо лучше поместить обменный курс в переменную, чтобы изменять это значение только в одном месте. Тогда сценарий будет выглядеть следующим образом:
<?php
$rate = 1.52;
$US_dollars = 20.00;
$CA_dollars = $US_dollars * $rate;
?>

Значение $rate можно установить в начале сценария, а затем использовать его в 50 необходимых местах сценария. Естественно, это более удобная реализация. Если потребуется изменить курс, то значение переменной потребуется поменять только в одном месте. Например, если на следующей неделе обменный курс изменится на 1.53, вам придется изменить лишь первую строку сценария:
$rate = 1.53;

Такой подход вполне пригоден. Однако $rate — не очень осмысленное имя. Вспомните, что сценарий содержит 40 000 строк кода и 2 строки, определяющие процедуру конвертирования валюты, которые используются в 50 различных местах. Предположим, где-то в середине сценария необходимо добавить некоторый код, определяющий степень заинтересованности. Предположим, где-нибудь в середине сценария вы случайно используете следующий код:
$interest_rate = 20;
$rate = $interest_rate-l;
$amount = $principal * $rate;

Теперь всюду после этого фрагмента значение переменной $rate изменится. Значение 1.52, установленное в начале сценария, будет заменено числом 19, определяемым этим кодом. Этого можно избежать, выбирая более осмысленные имена переменных. А еще лучше использовать константу, как в следующем сценарии:
<?php
define("RATE", 1.52);
$US_dolars = 20;
$CA_dollars = $US_dollars * RATE;
?>

Теперь вы используете константу RATE, которую нельзя изменить в сценарии. Если в середине сценария вы попробуете добавить строку
RATE = 20;
интерпретатор РНР не позволит изменить значение. Таким образом можно избежать ошибок, которые легко допустить при использовании переменных.

На следующей неделе, когда обменный курс изменится на 1.53, этот сценарий придется лишь слегка отредактировать следующим образом:
<?php
define("RATE", 1.53);
$US_dollars = 20
$CA_dollars = $US_dollars * RATE;
?>

Конечно, лучше использовать более осмысленное имя, например:
define("US_TO_CA", 1.52);

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

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

Отображение значений констант

Значение константы можно вывести с помощью функции print_r следующим образом:

print_r(US_TO_CA);

Константу также можно вывести с помощью оператора echo:

echo US_TO_CA;

Если для вывода константы используется оператор echo, имя константы не нужно заключать в кавычки. Если имя константы все же заключить в кавычки, то на экране отобразится имя константы, а не ее значение. Константу можно вывести, как показано в предыдущем примере, или же с использованием круглых скобок. Можно формировать и более сложные команды вывода, разделяя выводимые объекты запятыми, как в следующем примере:

<?
echo "Курс обмена на канадский доллар составляет $",US_TO_CA;
?>

Использование встроенных констант

В языке РНР определено множество встроенных констант, которые можно использовать в сценариях. Для примера, значением константы __LINE__ является номер текущей строки, а константа __FILE__ содержит имя соответствующего файла. (Встроенные константы начинаются с двух символов подчеркивания и заканчиваются тоже двумя символами подчеркивания.) Например, можно использовать команду

<? echo __FILE__ ; ?>

В языке РНР имеется и множество других встроенных констант. Например, констакты E_ALL и E_ERROR можно использовать для управления процессом обработки ошибок в РНР. Эти константы описаны в следующем разделе.

Обработка сообщений об ошибках к оглавлению

При возникновении проблем с выполнением сценария интерпретатор РНР выдает сообщения об ошибках. Существуют следующие типы сообщений.

    Сообщение об ошибке (error message). Это сообщение выдается при возникновении проблем, препятствующих выполнению сценария. Сценарий отображает сообщение об ошибке и прекращает свою работу. Чтобы помочь идентифицировать проблему, такое сообщение должно содержать как можно больше информации. Вот пример типичного сообщения об ошибке:
Parse error: parse error in c:\test.php on line 6
Такие сообщения об ошибках часто выдаются при отсутствии символа- разделителя (точки с запятой, кавычек или скобок).
Предупреждение (warning message). Предупреждающее сообщение выдается в том случае, когда интерпретатор РНР встречает проблему, но эта проблема не препятствует выполнению сценария. Предупреждающие сообщения указывают на вероятную некорректность кода. Необходимо идентифицировать источник возникновения сообщения, а затем решить, нужно ли изменять сценарий. Например, если не указать имя переменной в качестве параметра функции print_r — написать print_r(), а не print_r($varname), — появится следующее сообщение:
Warning: print_r() expects at least 1 parameter, 0 given in d:\testl.php on line 9
Поскольку это предупреждение, а не сообщение об ошибке, то после выполнения функции print_r работа сценария продолжится. Предупреждение обычно указывает на более серьезную проблему, а не содержит простое уведомление. В этом случае необходимо устранить проблему.
    Уведомление (notice). Такое сообщение выводится в том случае, когда в сценарии РНР встречается конструкция, которая может быть и ошибочной, и правильной. Обычно уведомление выводится в ответ на попытку отображения на экране несуществующих переменных. Рассмотрим пример:
Notice: Undefined variable: age in testing.php on line 9

Сообщения об ошибках, предупреждения и уведомления содержат имя проблемного файла и номер строки, в которой возникла проблема.

Типы отображаемых сообщений об ошибках зависят от установленного уровня проверки ошибок. Необходимо видеть все сообщения об ошибках, но далеко не все предупреждения и уведомления. (Зачастую единственная проблема с уведомлениями — это сами уведомления; при этом код работает правильно.) Можно сделать так, чтобы предупреждающие сообщения и уведомления отображались только во время отладки сценария, но не после того, как клиенты начнут использовать приложение. Все сообщения об ошибках можно записывать в журнал, чтобы они не выводились для пользователей, а вы могли их потом просмотреть.

Изменение уровня проверки ошибок для Web-узла

Уровень проверки ошибок для Web-узла определяется в файле php.ini. Если вы являетесь администратором модуля РНР и имеете доступ к файлу php.ini, то сможете изменить уровень проверки ошибок. Если вы не являетесь администратором, то можете изменить уровень обработки ошибок для каждого сценария в отдельности, как будет описано в следующем разделе. (Более детальную информацию о настройках, содержащихся в файле php.ini, можно найти в приложении А.)

Для того чтобы определить текущий уровень обработки ошибок, откройте файл php.ini в текстовом редакторе и найдите строку, подобную следующей:
error_reporting = E_ALL; display all errors, warnings and notices
(выводить все ошибки, уведомления и предупреждения)

Эта инструкция включает обработку всех типов ошибок и вывод сообщений о них. Этот режим полезен при разработке сценария. Однако после передачи сценария пользователям предупреждения и уведомления отображать не стоит.

Обратите внимание на то, что в приведенном выше примере точка с запятой находится после значения E_ALL, а не в начале строки. Точка с запятой — это символ, обозначающий комментарий в файле php.ini. Поэтому текст в строке после точки с запятой— талько комментарий, а не часть команды. Если бы точка с запятой располагалась в начале строки, то комментарием считалась бы вся строка и данная команда не выполняла бы никаких действий

При внимательном изучении файла php.ini вы, вероятно, найдете нескохько закомментированных команд. Эти инструкции включены как примеры, а не как выполняемые команды. Инструкции файла php.ini без точки с запятой в начале строки являются действующими.

E_ALL— это встроенная константа РНР, которая определяет все ошибки, предупреждения и уведомления; E_NOTICE — встроенная константа, определяющая уведомления. Эти две константы можно использовать в следующей конструкции:
error_reporting = E_ALL & ~E_NOTICE

Наличие E_ALL требует отображения всех сообщений об ошибках, предупреждений и уведомлений. Однако использование второго параметра ~E_N0TICE приводит к тому, что уведомления отображаться не будут. В результате будут отображаться только сообщения об ошибках и предупреждения. Этот метод позволяет очень легко определить уровень проверки ошибок, не задавая перечень всех типов ошибок, которые вы хотите отобразить.

Две инструкции, приведенные в этом разделе, используются наиболее часто. Чтобы установить уровень обработки ошибок, можно использовать и другие константы. Однако констант E_ALL и E_NOTICE обычно достаточно для большинства сценариев. Список всех констант можно найти в конфигурационном файле php.ini. Для получения более детальной информации об установке уровня обработки ошибок прочтите интерактивное руководство по языку РHP.

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

Чтобы отключить вывод сообщений об ошибках, найдите в файле php.ini строку display_errors = On и измените значение параметра On на Off.

Для того чтобы внесенные изменения вступили в силу, после любой модифккации файла php.ini необходимо перезапустить Web-сервер.

Изменение уровня проверки ошибок в сценарии

Если вы хотите установить уровень проверки ошибок для конкретного сценария, добавьте в начало сценария команду
error_reporting(ОПЦИИ) ;

ОПЦИИ— это одна из встроенных констант, рассмотренных в предыдущем разделе. Например, добавив в начало сценария следующую инструкцию, можно обеспечить вывод всех сообщений об ошибках, предупреждений и уведомлений:
error_reporting(E_ALL);

Предположим, что в файле php.ini уровень обработки ошибок установлен в значение E_ALL. Такой уровень обработки ошибок может вполне подходить для разработки сценариев, но после передачи сценария пользователям желательно отменить вывод уведомлений. Чтобы отменить настройки, заданные в файле php.ini, можно добавить к готовому сценарию инструкцию
error_reporting(E_ALL & ~E_N0TICE) ;

Можно так определить уровень обработки ошибок, чтобы не отображались никакие сообщения. Для этого используйте команду
error_reporting(0) ;

В готовых отлаженных сценариях вывод предупреждений и сообщений об ошибках обычно отключают. Не нужно, чтобы пользователи видели сообщения об ошибках, которые выдает интерпретатор РНР, потому что информация в таких сообщениях может представлять угрозу для безопасности сервера. Однако вы можете захотеть самостоятельно просматривать любые сообщения об ошибках. Используя данную функцию с параметром 0, можно отключить отображение сообщений об ошибках, но одновременно записывать такие сообщения в файл журнала. Пользователи не увидят сообщений, а вы сможете их просматривать. Запись сообщений в файл журнала описана в следующем разделе.

Запись сообщений в файл журнала

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

В журнал можно записывать сообщения об ошибках для всего узла. Для этого следует внести изменения в файл php.ini, если вы имеете к нему доступ. Откройте файл php.ini и найдите строку
log_errors = Off

Значение Off необходимо изменить на On. Нужно также указать, куда записывать сообщения об ошибках. Чтобы сделать это, найдите строку
;error_log = имя_файла

Теперь удалите точку с запятой в начале строки, превратив комментарий в действующую инструкцию. Замените значение имя_файла на путь к файлу, в который вы хотите сохранять сообщения об ошибках. Например, можно использовать команду
error_log = c:\temp\php_error_log

Необходимо указывать существующий каталог (в Windows он часто называется также папкой). Для того чтобы сообщения об ошибках можно было записывать в указанный файл, необходимо создать каталог с:\temp. При этом файл создавать не обязательно. Если интерпретатор РНР сможет найти указанный каталог, то он самостоятельно создаст требуемый файл.

Чтобы внесенные в файл php.ini изменения вступили в силу, необходимо перезапустить Web-сервер.

Расширенная обработка ошибок

В этом разделе описываются дополнительные возможности обработки ошибок. Новичкам совсем не обязательно читать этот раздел. Его следует изучить только после того, как вы освоите методы программирования на языке РНР, описанные в оставшейся части книги.

Стандартных сообщений РНР об ошибках может оказаться недостаточно. Например вы чувствуете, что сценарий работает неправильно, хотя интерпретатор РНР не обнаруживает никаких ошибок. Допустим, вы пишете сценарий проектирования дома. В таком случае, (ели высота двери, определяемая переменной $height_of_door, больше высоты дома $height_of__house, — это явно неправильно. Вам это известно, а интерпретатору РНР — нет. Он не распознает эту ситуацию как ошибку. Чтобы интерпретатор РНР проверял эту ошибку в сценарии, можно написать следующий код:
if ($height_of_door > $height_of_house)
{
trigger_error("Impossible condition", E_USER_ERROR);
}

Параметр E_USER_ERROR свидетельствует о том, что условие является ошибочным. Строка Impossible condition является сообщением, которое будет отображаться при возникновении данной ошибки. Если условие истинно, будет выводиться следующее сообщение:
Fatal error: Impossible condition in d:\testerr.php on line 9

Сценарий остановится в этой точке, поскольку интерпретатору РНР было указано, что это ошибка, а не предупреждение или уведомление. Если в качестве параметра вместо E_USER_ERROR указать E_USER_WARNING или E_USER_NOTICE, то РНР будет обрабатывать данную ситуацию как предупреждение или уведомление соответственно.

Если вы хотите определить свой собственный способ обработки ошибок, а не использовать стандартные процедуры РНР, то можно написать собственные операторы передачи сообщений, записи в журнал, отправки электронной почты или остановки сценария. Например, с помощью следующего кода можно вывести пользователю сообщение об ошибке и прервать выполнение сценария:
if ($height_of_door > $height_of_house)
{
echo "Это невозможно<br>";
exit ();
}

Если значение $height_of_door больше значения переменной $height_of_housе, будет выведено сообщение об ошибке и функция exit() прервет выполнение сценария. Никакие операторы больше выполняться не будут.

Сообщение об ошибке можно записать в файл журнала, воспользовавшись функцией
error_log(message, 3, имя_файла_журнала) ;

Например, можно использовать следующий блок if:
if ($height_of_door > $height_of_house)
{
error_log ("Дверь выше дома", 3, "/temp/err_log");
exit();
}

После добавления в сценарий этого оператора, если значение $height_of_door превышает $height_of_house, в файл журнала /temp/err_log будет записано сообщение Дверь выше дома. Значение 3 в этом операторе означает запись сообщения в указанный файл журнала. При этом каталог /temp должен существовать. Если файла журнала не существует, интерпретатор РНР создаст его самостоятельно.

В качестве альтернативы в случае ошибки можно отправить себе почтовое сообщение. Для этой цели, так же как и для записи сообщения об ошибке в файл журнала, можно использовать оператор error_log. Значение 1 в списке параметров функции error_log означает передачу сообщения по указанному адресу электронной почты:
error_log ("Дверь выше дома", 1, "me@mymail.com");

Использование этого оператора предполагает, что сообщение электронной почты можно отправить из PHP-сценария. Более подробно этот вопрос рассматривается в главе 13.

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

Для обработки ошибок можно написать собственный код и потребовать от интерпретатора РНР использовать его всякий раз при возникновении ошибок. Чтобы это реализовать, необходимо написать код обработки ошибок и сохранить его как функцию. Потом можно вызывать эту функцию всякий раз при возникновении ошибок. (Принципы создания функций описаны в Главе 8.) Чтобы при обработке ошибок интерпретатор РНР использовал созданную функцию, а не стандартную процедуру, воспользуйтесь функцией
set_error_handler(имя_функции);

Например, можно использовать следующую команду:
set_error_handler(my_error_handler);

Детальные рекомендации по созданию обработчика ошибок my_error_handler содержатся в Главе 8.

Еще один метод обработки ошибок средствами языка РНР состоит в использовании функции die, которая выводит сообщение при некорректной работе функции. Этот вопрос подробно обсуждается в Главе 8.

 

 

 

 

 

 

 

 

 

 

 

 

 

Глава 4 Глава 5 Глава 6 Глава 7 Глава 8 Глава 9


Февраль 2026 г
ПнВтСрЧтПтСбВс
05      1
062345678
079101112131415
0816171819202122
09232425262728 
Март 2026 г
ПнВтСрЧтПтСбВс
09      1
102345678
119101112131415
1216171819202122
1323242526272829
143031     
Апрель 2026 г
ПнВтСрЧтПтСбВс
14  12345
156789101112
1613141516171819
1720212223242526
1827282930   
End
fenita la comedia c 2026
End