HTTP Cookies
В PHP реалиован также простой способ работы с куками. С помощью функции SetCookie() можно их устанавливать, получать значения, как и в случае с формами - по имени переменной. В случае, если вы ожидаете получить несколько значений от куки имеет резон использовать в качестве имени переменной - массив. Как в следующем примере:
SetCookie ("MyCookie[]", "Testing", time()+3600);
Существует только одно небольшое ограничение. Так как куки - это часть HTTP заголовка их следует посылать самыми первыми. То есть грубо говоря, ваш скрипт должен начинаться с установки куки, а потом уже заниматься выводом html кода. Еще один пример, уже полноценного счетчика:
$Count++;
SetCookie ("Count", $Count, time()+3600);
SetCookie ("Cart[$Count]", $item, time()+3600);
Переменные окружения
И тут все так же просто. Хотите узнать домашний каталог? В юникс-системах это обычно переменная окружения с именем HOME. Так узнавайте:
echo $HOME;
Вы также можете работать с переменными окружения через функции getenv() и putenv()
КОНСТАНТЫ
Вы можете использовать не только переменные, но и константы с помощью функции define(). Взгляните на следующий пример:
define("CONSTANT", "Hello world.");
echo CONSTANT;
обратите внимание на то, что перед именем константы не пишется символ переменной $ и это правильно.
Список предопределенных констант:
Программируемый калькулятор.
Сегодня рассмотрим все возможные операции на всеми возможными типами переменных и их значениями.
АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ
Арифметических операций в PHP всего пять, вот они:
$a + $b
$a - $b
$a * $b
$a / $b
$a % $b
Я думаю здесь все ясно. Ну, может только поясню последнюю операцию, результатом ее выполнения будет остаток от деления $a на $b.
СТРОКОВЫЕ ОПЕРАЦИИ
Ха! А здесь и того меньше! Чисто строковой операцией считается операция сложения двух строк. Причем выглядит она довольно необычно, но практично:
$c = $a . $b;
То есть символом этой операции является точка. А результатом ее выполнения будет обыкновенная строка, состоящая из $a и $b.
ОПЕРАЦИЯ ПРИСВАИВАНИЯ
Ну, тут вообще ничего сложного, она всегда одна, это знак \'=\' и естественно этот знак означает, что переменной слева от него будет присвоено значение, полученное в результате выполнения каких либо операций или переменной/константы с правой стороны. Причем тут возможны некоторые С++-ные варианты, как-то:
$a = ($b = 4) + 5; // $a будет равна 9, а $b 4.
$a += 5; // аналогично $a = $a + 5;
$b = "Привет ";
$b .= "всем!"; // аналогично $b="Привет всем!"
ДВОИЧНЫЕ ОПЕРАЦИИ
Аа... и тут вообщем-то ничего нового:
ЛОГИЧЕСКИЕ ОПЕРАЦИИ
Все тоже...
ОПЕРАЦИИ СРАВНЕНИЯ
Здесь будет что-нибудь новое или нет? Даже комментировать эти операции не буду...
$res = (expr1) ? (expr2) : (expr3);
Результатом этой операции будет значение (expr2), в том случае, если expr1==1 и значение expr3 в противном случае. Где все эти expr1, expr2, expr3 - являются переменными/константами или математиескими выражениями. Такая запись по сути своей аналогична следующей:
if (expr1) $res=(expr2); else $res=(expr3);
но естественно более короткая.
А собственно об этом и все. Мы рассмотрели все операции, присутствующие в PHP. Следующим шагом рассмотрим управляющие структуры (или их еще можно назвать командами).
Поуправляем?
Мне кажется не стоит попусту лить воду и описывать тут и так всем известные из других языков программирования структуры управления. Вместо этого я приведу их полный список и все методы их использования.
Оператор IF
Структура:
if (выражение)
блок_выполнения
Пример использования:
if ($a > $b)
print "a больше, чем b";
if ($a > $b){
print "a больше, чем b";
$b = $a;
}
Оператор ELSE
Пример использования:
if ($a > $b) {
print "a больше, чем b";
} else {
print "a не больше, чем b";
}
Оператор ELSEIF
Интересный оператор. Он применяется в случае, когда вам необходимо использовать IF сразу после ELSE. Пример использования:
if ($a > $b) {
print "a is bigger than b";
} elseif ($a == $b) {
print "a is equal to b";
} else {
print "a is smaller than b";
}
Оператор if(): ... endif;
Тоже довольно необычная структура. Смысл ее в том, что если условие, записанное в круглых скобах оператора IF оказалось истинным, то будет выполняться весь код, начиная от двоеточия \':\' до команды ENDIF;
Пример использования:
A = 5
Или вот еще с использованием вышеописанного оператора ELSEIF
if ($a == 5):
print "a equals 5";
print "...";
elseif ($a == 6):
print "a equals 6";
print "!!!";
else:
print "a is neither 5 nor 6";
endif;
Оператор WHILE
Структура:
while (выражение): блок_выполнения ... endwhile;
И примерчик:
$i = 1;
while ($i <= 10) {
print $i++;
}
Оператор DO...WHILE
Вообщем-то ничего необычного - цикл, как цикл. Выполняется блок выполнения до тех пор, пока справедливо выражение. Структура:
do блок_выполнения while (выражение);
Оператор FOR
Точно такой-же цикл как и в C++. Структура:
for (выражение1; выражение2; выражение3)
блок_выполнения
Хотя - нет. Есть в PHP еще одно дополнение. Структура:
for (выражение1; выражение2; выражение3):
блок_выполнения; ...; endfor;
Обратите внимание, на двоеточие перед блоком выполнения.
Оператор break
Старо как мир. Этот оператор позволяет выскакивать из любого цикла (for, while, do...while) до окончания его выполнения. Пример:
$i = 0;
while ($i < 10) {
if ($arr[$i] == "stop") {
break;
}
$i++;
}
<
Оператор continue
Тоже ничего нового. Этот оператор позволяет пропустить дальнейшее действия блока_выполнения любого цикла и продолжить выполнение с нового круга. Пример:
while (выражение) {
if (выражение2)
continue;
действие;
};
Такая програма аналогична следующей, без использования continue:
while (выражение) {
if (!выражение2)
действие;
};
Оператор switch
Часто очень необходимый оператор выбора. Хотя все его и так знают, попробую представить ясный пример. Допустим у вас есть следующий участок в программе:
if ($i == 0) {
print "i равно 0";
} else
if ($i == 1) {
print "i равно 1";
} else
if ($i == 2) {
print "i равно 2";
} else
print "ни одно условие не прошло"
Сэкономить время выполнения данного участка, а также представить его более логичным способом поможет нам этот оператор. Следующий пример совершает действия, аналогичные предыдущему, но в более красивой форме:
switch ($i) {
case 0:
print "i равно 0";
break;
case 1:
print "i равно 1";
break;
case 2:
print "i равно 2";
break;
default:
print " ниодно условие не прошло"
}
В таком представлении есть и еще одно преимущество. Если вы не поставите оператор break, например, перед case 1:, то в случае, когда $I будет равен нулю после вывода на экран сообщения об этом программа пойдет дальше и выведет также сообщение о том, что $I равна еще и
и только после, встретив
[/font][/color]
продолжит свое выполнение за пределами switch[/font][/color]
Оператор require
Этот оператор действует примерно так-же как и #include в C++. Файл, указанный в кавычках включается в скрипт и выполняется, но только однажды. В файле, включаемом оператором require резонно хранить какие-то данные, необходимые для многих скриптов и соответственно влкючать его в эти "многие" скрипты. Структура его такая:
require \'header.inc\';
Оператор include
Структура:
include \'func.inc\';
Этот оператор позволяет включать код, содержащийся в указанном файле (func.inc в нашем случае) и выполнять его столько раз, сколько программа встречает этот оператор. То есть. Например, в файле func.inc у нас хранится программа вывода на экран определенных параметров. Ну и каждый раз, когда нам нужно будет выводить эти параметры мы будем вставлять в текст нашей основной программы include \'func.inc\', то есть это в принципе тоже самое, как если-бы мы везде в таких случаях вставляли бы текст, содержащийся в файле func.inc
Обратите внимание. Разница между include и require довольно существенная, поэтому поэксперементируйте с ними сами, если вы ее так и не усмотрели.
Ну вот и все. Надеюсь это пригодилось.
И снова PHP - продолжим, или галопом по Европам!
Итак, описание основных конструкций языка (за исключением классов - о них позже) сделано! Теперь следует попрактиковаться на реальном проекте. Но прежде все же надлежит уделить внимание некоторой рутине - хотя бы бегло рассмотреть основной набор функций языка. Большая часть этих функций находится в подключаемых модулях, которые собираются во время линковки интерпретатора (под win32 наборы функций выполнены как dll-и). Исключения составляют некоторые особо популярные группы функций, встроенные в ядро интерпретатора (встраиваемость зависит от версии PHP). Например, в PHP версии 4 функции доступа к MySQL встроены в интерпретатор.
Под рассмотрение (причем весьма беглое) подпадет некоторое подмножество функций. Я исключу из рассмотрения функции, специфичные для SQL-серверов (кроме, MySQL - именно его мы будем использовать в наших проектах, а работа с остальными SQL-серверами выполняется аналогичным образом), и некоторые другие из числа редкоиспользуемых (мною не используемых? .
Кроме того, я еще раз подчеркну - обзор будет весьма беглым. Подробнее разбирательством с возможностями PHP мы займемся по ходу работы над проектами.
Однако, приступим.
хотелось бы сказать вот о чем:
В фидошной конференции по PHP на днях пробегала такая ссылка: http://it.sinor.ru/?isnum=4. Автор в этой статье описывает метод установки PHP как модульApache под win32. К сожалению мой апач обиделся до глубины души от предложения загрузить в качестве модуля php4apache.dll. А жаль. Прийдется ставить линукс. В прочем, может, у меня просто руки ни к тому месту прикручены?
Далее. Опять же на днях (вот везет!) попался мне один чудный сайт "Опыты" (http://exper.ural.ru). С огромным удовольствием прочитав его содержимое, я наткнулся на статью "Использование транслятора XML в PHP.", которая сильно повлияла на мои планы по дальнейшим шагам. Дело в том, что, используя функции
XML-парсинга можно разрабатывать сайт на XML, а на выходе получить обычный HTML-файл. Что это дает? Самодокументируемый код, возможность генерить браузерозависимый код на сервере (а не тащить кучу кода на клиентскую машину и делать JavaScript-овые проверки версии браузера - на этом сайте, кстати, много материала посвящено различиям в интерпретации HTML- и JavaScript-кода браузерами IE и NN) и другие приятности. Мы в дальнейшем еще вернемся к теме XML.
Еще одна новость - издательство "Символ" решило учинить и на нашей улице праздник! (Не ищите на их сайте информацию об этих новинках - ее там нет! Я ничего не понимаю в их маркетинге.) На днях (опять же!) к нам пришла по почте книга, к которой прилагался рекламный буклет с планами издательства "Символ". Вот что я там узрел из их планов на конец этого - начало будущего года. Во-первых, Хариш Рават и др. Профессиональное программирование на PHP (!). 1100 страниц (!!). Я плакал !
От O\'Reilly: Стивен Спейнауэр. Справочник вебмастера. 2-е издание. Брэт МакЛафлин и др. Java и XML.
Ну наконец-то! Вот ОНА: Ларри УОЛЛ. Программирование на Perl. 3-е издание. 1200 страниц (!!!)
Да-да. Та самая кэмэлбука! Далее. Аллигатор (классное имя Декарт (и фамилия и др. Программирование на Perl DBI. Дэвид Бланк-Эдельман и др. Perl для системного администрирования. Скотт Гуэлич. CGI-программирование на Perl.
Фух. Рука бойцов колоть устала.
Заканчиваем обзор.
В PHP реалиован также простой способ работы с куками. С помощью функции SetCookie() можно их устанавливать, получать значения, как и в случае с формами - по имени переменной. В случае, если вы ожидаете получить несколько значений от куки имеет резон использовать в качестве имени переменной - массив. Как в следующем примере:
SetCookie ("MyCookie[]", "Testing", time()+3600);
Существует только одно небольшое ограничение. Так как куки - это часть HTTP заголовка их следует посылать самыми первыми. То есть грубо говоря, ваш скрипт должен начинаться с установки куки, а потом уже заниматься выводом html кода. Еще один пример, уже полноценного счетчика:
$Count++;
SetCookie ("Count", $Count, time()+3600);
SetCookie ("Cart[$Count]", $item, time()+3600);
Переменные окружения
И тут все так же просто. Хотите узнать домашний каталог? В юникс-системах это обычно переменная окружения с именем HOME. Так узнавайте:
echo $HOME;
Вы также можете работать с переменными окружения через функции getenv() и putenv()
КОНСТАНТЫ
Вы можете использовать не только переменные, но и константы с помощью функции define(). Взгляните на следующий пример:
define("CONSTANT", "Hello world.");
echo CONSTANT;
обратите внимание на то, что перед именем константы не пишется символ переменной $ и это правильно.
Список предопределенных констант:
- __FILE__ - Имя файла выполняемого скрипта.
- __LINE__ - Количество линий, интерптетированных на данный момент в этом скрипте.
- PHP_VERSION - Тут хранится версия PHP. Например: \'3.0.8-dev\'.
- PHP_OS - Имя операционной системы, на которой выполняется PHP-скрипт.
- TRUE - Истина.
- FALSE - Ложь.
- E_ERROR - Описывает случившуюся ошибку, после которой продолжение работы невозможно.
- E_WARNING - Описывает ошибку, после которой продолжается выполнение скрипта.
- E_PARSE - Описывает синтаксическую ошибку, при разборе интерпретатором текста скрипта.
- E_NOTICE - Просто какое-то сообщение от интерпретатора. Возможно ошибка, а возможно и нет.
Программируемый калькулятор.
Сегодня рассмотрим все возможные операции на всеми возможными типами переменных и их значениями.
АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ
Арифметических операций в PHP всего пять, вот они:
$a + $b
$a - $b
$a * $b
$a / $b
$a % $b
Я думаю здесь все ясно. Ну, может только поясню последнюю операцию, результатом ее выполнения будет остаток от деления $a на $b.
СТРОКОВЫЕ ОПЕРАЦИИ
Ха! А здесь и того меньше! Чисто строковой операцией считается операция сложения двух строк. Причем выглядит она довольно необычно, но практично:
$c = $a . $b;
То есть символом этой операции является точка. А результатом ее выполнения будет обыкновенная строка, состоящая из $a и $b.
ОПЕРАЦИЯ ПРИСВАИВАНИЯ
Ну, тут вообще ничего сложного, она всегда одна, это знак \'=\' и естественно этот знак означает, что переменной слева от него будет присвоено значение, полученное в результате выполнения каких либо операций или переменной/константы с правой стороны. Причем тут возможны некоторые С++-ные варианты, как-то:
$a = ($b = 4) + 5; // $a будет равна 9, а $b 4.
$a += 5; // аналогично $a = $a + 5;
$b = "Привет ";
$b .= "всем!"; // аналогично $b="Привет всем!"
ДВОИЧНЫЕ ОПЕРАЦИИ
Аа... и тут вообщем-то ничего нового:
- $a & $b - Побитовое И (AND)
- $a | $b - Побитовое ИЛИ (OR)
- ~ $a - Исключающее ИЛИ (XOR)
- $a << $b - Сдвиг влево на $b битов
- $a >> $b - Сдвиг вправо на $b битов
ЛОГИЧЕСКИЕ ОПЕРАЦИИ
Все тоже...
- $a and $b - И (AND)
- $a && $b - Тоже самое, что и предыдущее
- $a or $b - Или (OR)
- $a || $b - Тоже, что и предыдущее
- $a xor $b - Исключающее ИЛИ(XOR)
- ! $a - Инверсия (NOT)
ОПЕРАЦИИ СРАВНЕНИЯ
Здесь будет что-нибудь новое или нет? Даже комментировать эти операции не буду...
- $a == $b
- $a != $b
- $a < $b
- $a > $b
- $a <= $b
- $a >= $b
$res = (expr1) ? (expr2) : (expr3);
Результатом этой операции будет значение (expr2), в том случае, если expr1==1 и значение expr3 в противном случае. Где все эти expr1, expr2, expr3 - являются переменными/константами или математиескими выражениями. Такая запись по сути своей аналогична следующей:
if (expr1) $res=(expr2); else $res=(expr3);
но естественно более короткая.
А собственно об этом и все. Мы рассмотрели все операции, присутствующие в PHP. Следующим шагом рассмотрим управляющие структуры (или их еще можно назвать командами).
Поуправляем?
Мне кажется не стоит попусту лить воду и описывать тут и так всем известные из других языков программирования структуры управления. Вместо этого я приведу их полный список и все методы их использования.
Оператор IF
Структура:
if (выражение)
блок_выполнения
Пример использования:
if ($a > $b)
print "a больше, чем b";
if ($a > $b){
print "a больше, чем b";
$b = $a;
}
Оператор ELSE
Пример использования:
if ($a > $b) {
print "a больше, чем b";
} else {
print "a не больше, чем b";
}
Оператор ELSEIF
Интересный оператор. Он применяется в случае, когда вам необходимо использовать IF сразу после ELSE. Пример использования:
if ($a > $b) {
print "a is bigger than b";
} elseif ($a == $b) {
print "a is equal to b";
} else {
print "a is smaller than b";
}
Оператор if(): ... endif;
Тоже довольно необычная структура. Смысл ее в том, что если условие, записанное в круглых скобах оператора IF оказалось истинным, то будет выполняться весь код, начиная от двоеточия \':\' до команды ENDIF;
Пример использования:
A = 5
Или вот еще с использованием вышеописанного оператора ELSEIF
if ($a == 5):
print "a equals 5";
print "...";
elseif ($a == 6):
print "a equals 6";
print "!!!";
else:
print "a is neither 5 nor 6";
endif;
Оператор WHILE
Структура:
while (выражение): блок_выполнения ... endwhile;
И примерчик:
$i = 1;
while ($i <= 10) {
print $i++;
}
Оператор DO...WHILE
Вообщем-то ничего необычного - цикл, как цикл. Выполняется блок выполнения до тех пор, пока справедливо выражение. Структура:
do блок_выполнения while (выражение);
Оператор FOR
Точно такой-же цикл как и в C++. Структура:
for (выражение1; выражение2; выражение3)
блок_выполнения
Хотя - нет. Есть в PHP еще одно дополнение. Структура:
for (выражение1; выражение2; выражение3):
блок_выполнения; ...; endfor;
Обратите внимание, на двоеточие перед блоком выполнения.
Оператор break
Старо как мир. Этот оператор позволяет выскакивать из любого цикла (for, while, do...while) до окончания его выполнения. Пример:
$i = 0;
while ($i < 10) {
if ($arr[$i] == "stop") {
break;
}
$i++;
}
<
Оператор continue
Тоже ничего нового. Этот оператор позволяет пропустить дальнейшее действия блока_выполнения любого цикла и продолжить выполнение с нового круга. Пример:
while (выражение) {
if (выражение2)
continue;
действие;
};
Такая програма аналогична следующей, без использования continue:
while (выражение) {
if (!выражение2)
действие;
};
Оператор switch
Часто очень необходимый оператор выбора. Хотя все его и так знают, попробую представить ясный пример. Допустим у вас есть следующий участок в программе:
if ($i == 0) {
print "i равно 0";
} else
if ($i == 1) {
print "i равно 1";
} else
if ($i == 2) {
print "i равно 2";
} else
print "ни одно условие не прошло"
Сэкономить время выполнения данного участка, а также представить его более логичным способом поможет нам этот оператор. Следующий пример совершает действия, аналогичные предыдущему, но в более красивой форме:
switch ($i) {
case 0:
print "i равно 0";
break;
case 1:
print "i равно 1";
break;
case 2:
print "i равно 2";
break;
default:
print " ниодно условие не прошло"
}
В таком представлении есть и еще одно преимущество. Если вы не поставите оператор break, например, перед case 1:, то в случае, когда $I будет равен нулю после вывода на экран сообщения об этом программа пойдет дальше и выведет также сообщение о том, что $I равна еще и
- Код:
1
и только после, встретив
[/font][/color]
- Код:
break;
продолжит свое выполнение за пределами switch[/font][/color]
Оператор require
Этот оператор действует примерно так-же как и #include в C++. Файл, указанный в кавычках включается в скрипт и выполняется, но только однажды. В файле, включаемом оператором require резонно хранить какие-то данные, необходимые для многих скриптов и соответственно влкючать его в эти "многие" скрипты. Структура его такая:
require \'header.inc\';
Оператор include
Структура:
include \'func.inc\';
Этот оператор позволяет включать код, содержащийся в указанном файле (func.inc в нашем случае) и выполнять его столько раз, сколько программа встречает этот оператор. То есть. Например, в файле func.inc у нас хранится программа вывода на экран определенных параметров. Ну и каждый раз, когда нам нужно будет выводить эти параметры мы будем вставлять в текст нашей основной программы include \'func.inc\', то есть это в принципе тоже самое, как если-бы мы везде в таких случаях вставляли бы текст, содержащийся в файле func.inc
Обратите внимание. Разница между include и require довольно существенная, поэтому поэксперементируйте с ними сами, если вы ее так и не усмотрели.
Ну вот и все. Надеюсь это пригодилось.
И снова PHP - продолжим, или галопом по Европам!
Итак, описание основных конструкций языка (за исключением классов - о них позже) сделано! Теперь следует попрактиковаться на реальном проекте. Но прежде все же надлежит уделить внимание некоторой рутине - хотя бы бегло рассмотреть основной набор функций языка. Большая часть этих функций находится в подключаемых модулях, которые собираются во время линковки интерпретатора (под win32 наборы функций выполнены как dll-и). Исключения составляют некоторые особо популярные группы функций, встроенные в ядро интерпретатора (встраиваемость зависит от версии PHP). Например, в PHP версии 4 функции доступа к MySQL встроены в интерпретатор.
Под рассмотрение (причем весьма беглое) подпадет некоторое подмножество функций. Я исключу из рассмотрения функции, специфичные для SQL-серверов (кроме, MySQL - именно его мы будем использовать в наших проектах, а работа с остальными SQL-серверами выполняется аналогичным образом), и некоторые другие из числа редкоиспользуемых (мною не используемых? .
Кроме того, я еще раз подчеркну - обзор будет весьма беглым. Подробнее разбирательством с возможностями PHP мы займемся по ходу работы над проектами.
Однако, приступим.
- Функции, специфичные для Apache-сервера я пока опускаю, т.к. под win32 они не идут (если я правильно понял readme.txt из дистрибутива PHP, то и не должны идти - под win32 PHP живет в CGI-выполняемом режиме, а не как модуль apache). Под *nix-ом я пока проверить не имею возможности. Подождем до лучших времен.
- Функции работы с массивами. Эта группа одна из самых многочисленных (если не самая многочисленная). Причем под PHP версии 4 она раза в два больше, чем под 3-й версией. Базовыми для обеих версий можно считать функцию конструирования массива array(), функции сортировки (штук 9), функции навигации по массиву (перемещение внутреннего указателя - подробности в следующих шагах), информационные функции (количество элементов массива и некоторые другие), выборка данных. Как я уже сказал, в 4-й версии добавлена большая группа функций array_xxxxx(), где xxxxx - предназначение. Например, array_push() добавляет элемент в конец массива. Эта группа отвечает за сравнения массивов, множественные операции (объединение, пересечение, разность и пр.), добавление/удаление элемент и некоторые другие операции.
- 4 функции работы со словарем.
- Математические функции над числами произвольной точности.
- Функции работы с календарями.
- Поддержка COM-объектов на win32-платформе.
- В 4-й версии добавлены функции получения информации о классах в PHP
хотелось бы сказать вот о чем:
В фидошной конференции по PHP на днях пробегала такая ссылка: http://it.sinor.ru/?isnum=4. Автор в этой статье описывает метод установки PHP как модульApache под win32. К сожалению мой апач обиделся до глубины души от предложения загрузить в качестве модуля php4apache.dll. А жаль. Прийдется ставить линукс. В прочем, может, у меня просто руки ни к тому месту прикручены?
Далее. Опять же на днях (вот везет!) попался мне один чудный сайт "Опыты" (http://exper.ural.ru). С огромным удовольствием прочитав его содержимое, я наткнулся на статью "Использование транслятора XML в PHP.", которая сильно повлияла на мои планы по дальнейшим шагам. Дело в том, что, используя функции
XML-парсинга можно разрабатывать сайт на XML, а на выходе получить обычный HTML-файл. Что это дает? Самодокументируемый код, возможность генерить браузерозависимый код на сервере (а не тащить кучу кода на клиентскую машину и делать JavaScript-овые проверки версии браузера - на этом сайте, кстати, много материала посвящено различиям в интерпретации HTML- и JavaScript-кода браузерами IE и NN) и другие приятности. Мы в дальнейшем еще вернемся к теме XML.
Еще одна новость - издательство "Символ" решило учинить и на нашей улице праздник! (Не ищите на их сайте информацию об этих новинках - ее там нет! Я ничего не понимаю в их маркетинге.) На днях (опять же!) к нам пришла по почте книга, к которой прилагался рекламный буклет с планами издательства "Символ". Вот что я там узрел из их планов на конец этого - начало будущего года. Во-первых, Хариш Рават и др. Профессиональное программирование на PHP (!). 1100 страниц (!!). Я плакал !
От O\'Reilly: Стивен Спейнауэр. Справочник вебмастера. 2-е издание. Брэт МакЛафлин и др. Java и XML.
Ну наконец-то! Вот ОНА: Ларри УОЛЛ. Программирование на Perl. 3-е издание. 1200 страниц (!!!)
Да-да. Та самая кэмэлбука! Далее. Аллигатор (классное имя Декарт (и фамилия и др. Программирование на Perl DBI. Дэвид Бланк-Эдельман и др. Perl для системного администрирования. Скотт Гуэлич. CGI-программирование на Perl.
Фух. Рука бойцов колоть устала.
Заканчиваем обзор.