How IT works

Вы находитесь здесь:
<< < > >>

Вообще тут есть:
([ Выпуски ])
([ Архив ])
([ Remap ])
([ Strjoy ])
([ Void ])

Поиск по сайту:

Между прочим...
Про php пишут здесь.

А у Спектатора тем временем...

Итак, вот и поставлена новая веха в истории этого сайта. За прошедшее с последнего выпуска время его основа была переделана на базу данных и xml. Снаружи это не сильно заметно, но изнутри всё стало проще, надёжней и, вероятно, быстрее. Лепота..:)

Хм, наговорил умных слов, теперь неплохо бы и объяснить, что они означают. Первое означает, что мне была выдана база данных (за что спасибо узлу Синор и лично его вёбмастеру Вячеславу). Выпуски теперь хранятся не в отдельных текстовых файлах, а в едином файле, логически разбитом на строки и ячейки в строках, а доступ к ним осуществляется уже не функциями файловой системы, а специальными функциями работы с базами. Естественно, применения базы данных этим не исчерпываются - теперь я могу установить и форум, и систему статистики и везде хранение данных будет удобным, быстрым и надёжным.

Так, далее. XML - это eXtensible Markup Language, или расширяемый язык разметки. Вообще, тут проще показать, чем расказать:

<issue>
<part>
<paragraph>Итак, вот и поставлена  . . .   </paragraph>
<paragraph>Хм, наговорил умных слов, . . . </paragraph>
<paragraph>Так, далее. XML - это   . . .   </paragraph>
<listing of="plain" file="issue.xml"/>
<paragraph>Вот в таком виде хранится . . . </paragraph>
</part>
<part>
<paragraph>А теперь посмотрим, что  . . .  </paragraph>
<paragraph>Короче говоря, поторопился . . .</paragraph>
<paragraph>В области же железа всё  . . .  </paragraph>
</part>
   .
   .
   .
</issue>

Вот в таком виде хранится в базе текст выпусков. Естественно, перед показом всё это перелопачивается скриптом в понятный браузеру HTML. Преимущества такого подхода очевидны: если, например, мне захочется вставить между частями выпуска красивый графический разделитель вместо стандартного html'ного <hr>, то достаточно будет поправить один скрипт, а не исправлять кучу выпусков. То есть достигается то, о чём так мечтали до распространения такого метода многие дизайнеры и вёбмастеры - разделение содержания и оформления, или, говоря умными словами, контента и дизайна :)

А теперь посмотрим, что же произошло в мире софта. Новостью номер один вполне можно назвать столь долгожданный выход Netscape 6 release. Увы, надежд большинства страждущих он не оправдал :( . Хоть он и оказался побыстрее, чем Mozilla M18 (за счёт вычищения отладочного кода), но тем не менее остался весьма неповоротливым и даже несколько глючным. Да и запросы его к памяти остались прежними - попытка работы на машине с менее чем 48 мегабайтами памяти может привести к психическим расстройствам на почве слишком подолгу сбывающихся ожиданий :)

Короче говоря, поторопился Netscape с релизом. Хотя и ждать уже трудновато было - в последнее время Netscape сдаёт позиции перед IE (в этом можно убедиться, например, посмотрев глобальную статистику на spylog.ru или статью на ZDNet). Думаю, теперь процент пользователей NN несколько подскочит, но потом продолжит падать. Если не будет никаких значительных событий (например, выхода новых версий Netscape), то падение это, вероятно, продлится (естественно, замедляясь - а не то через год-полтора Netscape вовсе исчезнет :) до того времени, когда Linux начнёт по популярности догонять Windows (а идёт он к этому довольно уверенно, особенно в странах Европы). Там IE пока нет, хотя не исключено, что Microsoft к тому времени выпустит IE и под Linux - вон под Маки же сделали...

В области же железа всё гораздо более прозаично - появление очередного, четвёртого Пентиума уже мало кого удивляет :) . К тому же мало того, что по некоторым тестам он показывает производительность даже ниже, чем Pentium III, так и ещё в BIOS'е к нему сразу обнаружилась ошибка. Хорошо хоть, что сразу..;)

Наткнулся недавно на пакет SamSpade... Такого многофункционального и при этом бесплатного набора интернет-утилиток я ещё не встречал. Есть ping, whois, nslookup, traceroute, finger и т.д. Но это всё мелочи, а вот особый интерес представляют функции борьбы со спамом - например, можно проверить список транзитных серверов, указанный в заголовках письма, что может помочь в выяснении, с какого IP-адреса письмо было послано на самом деле. Узнав адрес хоста, можно с помощью другого пункта меню выяснить, какому домену этот адрес принадлежит, после чего, нажав другую кнопочку, попробовать из специальной базы достать адрес для жалоб о спаме с этого домена.

(php)В прошлом выпуске я намекнул, что в этот раз расскажу о массивах. Массивы - это одна из сильных сторон php, поэтому я и не стал тогда углубляться в эту тему.

Итак, для начала дам определение предмета разговора (не смейтесь - массивы в php сильно отличаются от массивов в большинстве других языков). Массив в php - это упорядоченное множество пар значений (элементов массива). В каждой из этих пар одно значение может иметь тип integer или string и называется именем или ключом элемента (причём каждый ключ уникален в пределах своего массива), а второе может иметь любой тип (в том числе - быть ссылкой, хоть на этот же массив) и является собственно значением элемента массива. Кстати, упомянутая возможность иметь ссылку в качестве значения элемента массива может привести к долгим поискам причины зависания скрипта, с какой-то целью просматривающего массив всех переменных $GLOBALS, если забыть, что этот массив содержит сам себя.

Для получения или задания определённого элемента массива используется следующий синтаксис: $массив[ключ]. Кстати, это выглядит бредом, но приведённая конструкция заработает даже в таком виде, так как имя переменной (в том числе и массива) вполне может содержать русские буквы, а ключ в массиве вообще является значением типа string, то есть там допускаются любые символы, хоть переводы строк. Правда, при использовании в ключе символов, могущих ввести php в заблуждение (переводы строк, квадратные скобки...) ключ нужно брать в кавычки. Хорошим тоном считается брать в кавычки вообще любой ключ типа string.

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

Также массив можно создать с помощью функции array. Синтаксис она имеет следующий (квадратные скобки здесь обозначают необязательные элементы):

array([ключ=>]значение, [ключ=>]значение, ...)

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

К сожалению, направленность этих заметок, объём предполагаемых работ и отсутствие энтузиазма :) не позволяют мне описать все функции работы с массивами, поэтому тем, кому действительно надо работать с массивами, рекомендую пройти на соответствующую страницу официальной документации. Я лишь упомяну напоследок часто пропускаемую конструкцию foreach:

foreach($массив as [$ключ=>]$значение)оператор;

Она обходит все элементы массива и для каждого элемента присваивает соответствующие значения переменным $ключ (если задана) и $значение, после чего выполняет оператор.