Практические приемы глубинного анализа и синтаксического разбора данных при помощи PHP

Исследование XML- и HTML-данных при помощи PHP с целью поиска полезной информации

Искусство глубинного анализа данных (data mining) – это обширная тема, и каждый разработчик имеет о нем свое собственное мнение. В статье рассматриваются глубинный анализ данных и его значение, различные способы выполнения анализа данных (или создания средств глубинного анализа данных в Web), а также структура XML с точки зрения синтаксического разбора XML- и других данных средствами технологии PHP.

Эли Уайт, технический директор, MojoLive

Эли Уайт (Eli White) – фотографияЭли Уайт (Eli White) работает над созданием Web-приложений уже более 16 лет; в настоящее время является техническим директором компании MojoLive. Последние 10 лет он занимается исключительно PHP-проектами. В прошлом работал в разных областях, включая проекты Zend, TripAdvisor, Digg и программу космического телескопа "Хаббл". Является автором книги "Практика использования PHP 5" и регулярно участвует в конференциях.



19.04.2012

Глубинный анализ данных и его значение

Часто используемые сокращения

  • API: Application Programming Interface (прикладной интерфейс программирования)
  • CDATA: Character Data (символьные данные)
  • DOM: Document Object Model (объектная модель документа)
  • FTP: File Transfer Protocol (протокол передачи файлов)
  • HTML: Hypertext Markup Language (язык разметки гипертекста)
  • HTTP: Hypertext Transfer Protocol (протокол передачи гипертекста)
  • REST: Representational State Transfer (передача репрезентативного состояния)
  • URL: Uniform Resource Locator (унифицированный указатель ресурсов)
  • W3C: World Wide Web Consortium (консорциум WWW)
  • XML: Extensible Markup Language (расширяемый язык разметки)

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

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


Практическое использование глубинного анализа данных

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


Меры предосторожности при анализе Web-сайтов

Прежде чем продолжить, я должен отметить, что в статье предполагается извлечение данных с постороннего Web-сайта. Если в вашем распоряжении уже есть данные – это абсолютно другая ситуация. При извлечении данных с Web-сайта необходимо придерживаться условий соглашения об использовании, независимо от способа извлечения – при помощи технологии web scraping (более подробно описывается ниже) или API. При использовании web scraping необходимо учитывать информацию файла robots.txt, указывающего сценарии Web-сайта, к которым можно обращаться. Кроме того, нужно помнить о пропускной способности сайта. Нельзя писать сценарии, обращающиеся к данным сайта со скоростью выполнения сценария. В противном случае вы не только создадите проблемы хостингу, но и рискуете быть забаненным или заблокированным этим сайтом за излишнюю настойчивость.


Структура XML-данных

Независимо от способа сбора данных, скорее всего, вы получите их в формате XML (или HTML). XML стал стандартным языком в Интернете там, где речь идет о совместно используемых данных. Поэтому мы вкратце рассмотрим структуру XML и способы ее обработки в PHP, а затем перейдем к методам ее извлечения.

Базовая структура XML-документа очень проста, особенно если вы раньше работали с HTML. Все данные в XML-документе хранятся одним из двух способов. Основной способ – хранение во вложенных тегах. В качестве простейшего примера рассмотрим адрес, хранящийся в следующем документе:

<address>1234 Main Street, Baltimore, MD</address>

Из таких XML-данных можно создать вложенную структуру для представления списка из нескольких адресов. Можно вложить все эти адреса в другой тег, например, в тег locations (см. листинг 1).

Листинг 1. Несколько адресов в XML
<locations>
    <address>1234 Main Street, Baltimore, MD</address>
    <address>567 1st Street, San Jose, CA</address>
    <address>901 Washington Ave, Chicago, IL</address>
</locations>

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

Листинг 2. Адреса, разбитые на составляющие
<locations>
    <address>
        <street>1234 Main Street</street>
        <city>Baltimore</city>
        <state>MD</state>
    </address>
    <address>
        <street>567 1st Street</street>
        <city>San Jose</city>
        <state>CA</state>
    </address>
    <address>
        <street>901 Washington Ave</street>
        <city>Chicago</city>
        <state>IL</state>
    </address>
</locations>

Как уже говорилось, XML-данные можно хранить двумя способами. Только что был рассмотрен один из них. Второй способ – использование атрибутов. Каждый тег может иметь несколько связанных с ним атрибутов. Хотя этот способ применяется реже, он может быть очень полезен. Иногда он предоставляет дополнительную информацию, например уникальный идентификатор или дату события. Довольно часто он добавляет метаданные; в примере с адресом атрибут type указывает, является адрес домашним или рабочим (см. листинг 3).

Листинг 3. Теги, добавленные в XML
<locations>
    <address type="home">
        <street>1234 Main Street</street>
        <city>Baltimore</city>
        <state>MD</state>
    </address>
    <address type="work">
        <street>567 1st Street</street>
        <city>San Jose</city>
        <state>CA</state>
    </address>
    <address type="work">
        <street>901 Washington Ave</street>
        <city>Chicago</city>
        <state>IL</state>
    </address>
</locations>

Отмечу, что XML-документы всегда имеют родительский корневой тег/узел, потомками которого являются все остальные теги/узлы. XML может включать в себя также другие объявления и определения в начале документа и некоторые другие более сложные элементы (например, блоки CDATA). Я настоятельно рекомендую ознакомиться с подробной информацией по XML, ссылка на которую приведена в разделе Ресурсы.


Синтаксический анализ XML-данных в PHP

Теперь, когда мы разобрались со структурой XML, необходимо узнать, как анализировать и программным способом обращаться к этим данным из PHP. Целый ряд библиотек, созданных для PHP, позволяют выполнять синтаксический анализ XML-документов, и каждая из них имеет свои преимущества и недостатки. К ним относятся DOM, XMLReader/Writer, XML Parser, SimpleXML и другие. В этой статье я сосредоточусь на SimpleXML, поскольку она является одной из наиболее часто используемых и одной из моих любимых.

Библиотека SimpleXML, как следует из ее названия, была создана для реализации очень простого интерфейса к XML. Она берет XML-документ и преобразовывает его во внутренний формат PHP-объектов. Обращение к точкам данных становится таким же простым, как обращение к объектным переменным. Синтаксический анализ XML-документа при помощи SimpleXML сводится просто к использованию функции simplexml_load_file() (см. листинг 4).

Листинг 4. Анализ документа при помощи SimpleXML
<?php
$xml = simplexml_load_file('listing4.xml');
?>

Вот и все, что необходимо. Обратите внимание, что благодаря функциональности интеграции файловых потоков (filestream integration), предоставляемой PHP, здесь можно указать имя файла или URL, и они будут автоматически извлекаться. Можно также использовать simplexml_load_string(), если XML-документ уже был загружен в память. Если выполнить этот код с XML из листинга 3 и использовать функцию print_r() для просмотра грубой структуры данных, на экране должна отобразиться информация, аналогичная приведенной в листинге 5.

Листинг 5. Вывод проанализированных XML-данных
SimpleXMLElement Object 
(
     [address] => Array
         (
             [0] => SimpleXMLElement Object
                 (
                     [@attributes] => Array
                         (
                             [type] => home
                         )
                     [street] => 1234 Main Street
                     [city] => Baltimore
                     [state] => MD
                 )
              [1] => SimpleXMLElement Object
                 (
                     [@attributes] => Array
                         (
                             [type] => work
                         )
                     [street] => 567 1st Street
                     [city] => San Jose
                     [state] => CA
                 )
              [2] => SimpleXMLElement Object
                 (
                     [@attributes] => Array
                         (
                             [type] => work
                         ) 
                     [street] => 901 Washington Ave
                     [city] => Chicago
                     [state] => IL
                 )
          )
)

Затем можно обратиться к этим данным, используя стандартные методы доступа к PHP-объектам. Например, для вывода списка штатов, в которых когда-либо жило интересующее нас лицо , можно выполнить итерирование по адресам (см. листинг 6).

Листинг 6. Итерирование по адресам
<?php
$xml = simplexml_load_file('listing4.xml');

foreach ($xml->address as $address) {
    echo $address->state, "<br \>\n";
}
?>

Обращение к атрибутам выполняется несколько иначе. Вместо того чтобы ссылаться на них как на свойство объекта, к ним обращаются как к массиву значений. Для отображения атрибута type можно изменить последний пример кода на код, приведенный в листинге 7.

Листинг 7. Добавление атрибутов
<?php
$xml = simplexml_load_file('listing4.xml');

foreach ($xml->address as $address) {
    echo $address->state, ': ', $address['type'], "<br \>\n";
}
?>

Хотя все приведенные примеры используют итерирование, можно обращаться к данным напрямую и использовать конкретный фрагмент информации, например, номер дома и название улицы из второго адреса: $xml->address[1]->street.

Теперь у нас есть базовые инструменты для начала работы с XML-данными. Я рекомендую прочесть документацию по SimpleXML и другую информацию, ссылки на которую приведены в разделе Ресурсы.


Глубинный анализ данных в PHP: возможные способы

Как уже упоминалось, к данным можно обращаться несколькими способами. Двумя основными способами являются web scraping и API.

Web scraping

Технология web scraping представляет собой программную загрузку полного кода Web-страниц и извлечение из них данных. Существуют целые книги, полностью посвященные этой технологии (см. раздел Ресурсы). Я кратко перечислю инструментальные средства, необходимые для этого. Во-первых, это язык PHP, позволяющий легко читать Web-страницу в виде строки. Существует много способов сделать это, включая использование file_get_contents() с указанием URL, но в данном случае мы хотим иметь возможность осмысленного анализа HTML.

Учитывая, что HTML основан на XML, полезно преобразовать HTML в структуру SimpleXML. Но мы не можем просто загрузить HTML-страницу, используя simplexml_load_file(), так как даже синтаксически корректный HTML-документ не является XML-документом. Хорошим решением является применение DOM-расширения для загрузки HTML-страницы в виде DOM-документа с последующим преобразованием его в SimpleXML, как показано в листинге 8.

Листинг 8. Использование DOM-метода для получения SimpleXML-версии Web-страницы
<?php
$dom = new DOMDocument();
$dom->loadHTMLFile('http://example.com/');
$xml = simplexml_import_dom($dom);
?>

После этого можно работать с HTML-страницей точно так же, как и с любым другим XML-документом. Так, можно обратиться к заголовку страницы, используя $xml->head->title, либо погрузиться в страницу, используя, например, ссылку $xml->body->div[0]->div[0]->div[0]->h4[0].

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

К счастью, если вы хотите найти только первый h4 на странице или другие подобные "прямые данные", есть намного более простой способ - использование XPath. XPath – это, по существу, способ поиска данных в XML-документах с использованием языка запросов. XPath –очень мощное средство, которое может быть темой для целой серии статей, включая представленные в разделе Ресурсы. Если говорить в общих чертах - '/' служит для описания иерархических взаимоотношений; следовательно, предыдущую ссылку можно заменить следующим XPath-выражением (см. листинг 9).

Листинг 9. Прямое использование XPath
<?php
$h4 = $xml->xpath('/html/body/div/div/div/h4');
?>

Также можно было бы просто использовать в XPath выражение '//', означающее поиск тегов по всему документу. Следовательно, мы могли бы найти все элементы h4 как массив, затем обратиться к первому, используя следующее XPath-выражение:
'//h4'

Обход иерархии HTML

Главной причиной обсуждения этих преобразований и XPath является то, что одной из типичных задач при использовании технологии web scraping является автоматический поиск других ссылок на Web-странице и переход по ним, что позволяет "обойти" весь Web-сайт и найти как можно больше информации.

Эта довольно тривиальная задача при использовании XPath. В листинге 10 приведен код для сбора в массив всех ссылок <a> с атрибутами href для последующей обработки.

Листинг 10. Комбинирование методик поиска всех ссылок на странице
<?php
$dom = new DOMDocument();
$dom->loadHTMLFile('http://example.com/');
$xml = simplexml_import_dom($dom);
$links = $xml->xpath('//a[@href]');
foreach ($links as $l) {
    echo $l['href'], "<br />\n";
}
?>

Наш код ищет все ссылки <a href="">, но если переходить по каждой найденной ссылке, то можно быстро начать сканировать весь Интернет. Поэтому лучше усовершенствовать код и переходить только по тем HTML-ссылкам (не FTP- и не JavaScript-), которые ведут на этот же Web-сайт (либо полные доменные ссылки, либо относительные).

Простой способ – итерирование по ссылкам при помощи встроенной в PHP функции parse_url(), которая сделает за вас основную работу. В листинге 11 приведен пример.

Листинг 11. Более эффективный обход сайта
<?php
$dom = new DOMDocument();
$host = 'example.com';
$dom->loadHTMLFile("http://{$host}/");
$xml = simplexml_import_dom($dom);
$links = $xml->xpath('//a[@href]');
foreach ($links as $l) {
    $p = parse_url($l['href']);
    if (empty($p['scheme']) || in_array($p['scheme'], array('http', 'https'))) {
        if (empty($p['host']) || ($host == $p['host'])) {
            echo $l['href'], "<br />\n"; // Handle URL iteration here
        }
    }
}
?>

И последнее замечание по анализу HTML. Мы рассмотрели использование DOM-расширения исключительно для обратного преобразования в SimpleXML с целью обеспечения унифицированного интерфейса ко всем XML-подобным языкам. Отмечу, что DOM-библиотека сама по себе является очень надежной и ее можно использовать напрямую. Если вы хорошо знакомы с JavaScript и с обходом DOM-дерева документа при помощи таких средств, как getElementsByTagName, возможно, вам лучше оставаться в рамках DOM-библиотеки и не использовать SimpleXML.

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

Использование XML API и XML-данных

Вы, наверное, уже знакомы с основами использования большинства API для работы с XML-данными в Интернете. Они часто основаны на технологии REST и, следовательно, для извлечения данных и их анализа с помощью описанных выше методик требуются только простой HTTP-доступ.

Каждый API имеет свои отличия. Мы, разумеется, не можем охватить все XML API, поэтому рассмотрим основные примеры. Одним из наиболее часто используемых источников данных, уже представленных в XML-формате, являются RSS-фиды. RSS (Really Simple Syndication – действительно простая синдикация) – это стандартизированный формат предоставления совместного доступа к часто обновляемым данным, таким как сообщения в блогах, заголовки новостей или подкасты. Ссылки на дополнительную информацию по RSS приведены в разделе Ресурсы. Отмечу, что RSS – это XML-файл с родительским тегом <channel>, который может иметь любое число тегов <item>, каждый из которых предоставляет набор элементов данных.

В качестве примера используем SimpleXML для чтения RSS-фида заголовков новостей из газеты The New York Times (ссылка на RSS-фид приведена в разделе Ресурсы). Затем список заголовков новостей отформатируем ссылками на их содержание (см. листинг 12).

Листинг 12. Чтение RSS-фида The New York Times
<ul>
<?php
$xml = simplexml_load_file('http://www.washingtonpost.com/rss/homepage');
foreach ($xml->channel->item as $item) {
    echo "<li><a href=\"{$item->link}\">{$item->title}
</a></li>";
}
?>
</ul>

На рисунке 1 показан экран с информацией из фида The New York Times.

Рисунок 1. Информация из фида The New York Times
Рисунок 1. Информация из фида The New York Times

Теперь давайте рассмотрим пример более функционального API, основанного на REST. Для начала подойдет Flickr API, поскольку он предлагает много данных и не требует аутентификации. Многие API для работы от имени Web-пользователя требуют выполнения процедуры аутентификации с использованием Oauth или других механизмов. Этот шаг может применяться ко всему API или к его части. В документации по каждому API описано, как это сделать.

Чтобы продемонстрировать использование Flickr API для неаутентифицированного запроса, можно использовать API поиска. Например, можно найти на Flickr все общедоступные фотографии арбалетов. Поскольку нет необходимости выполнять аутентификацию, как во многих других API, нам нужно сгенерировать API-ключ для использования во время обращения к данным. Как это сделать – описано в документации по Flickr API. После получения API-ключа можно приступать к поиску (см. листинг 13).

Листинг 13. Поиск изображений арбалетов с использованием Flickr API
<?php
// Сохранить основную информацию, необходимую для ссылок
$apiurl = 'http://api.flickr.com/services/rest/?';
$key = '9f275087e222ee395c92662437bf84a2'; // Заменить на ваш ключ

// Создать массив параметров, которые нужно запросить:
$params = array(
    'method' => 'flickr.photos.search',
    'api_key' => $key,
    'text' => 'crossbow', // Элемент поиска
    'media' => 'photos',
    'per_page' => 20 // Вывести только 20 результатов
);

// Выполнить запрос к Flickr:
$xml = simplexml_load_file($apiurl . http_build_query($params));

// Выполнить итерацию по списку фотографий и запросить более подробную информацию:
foreach ($xml->photos->photo as $photo) {
    // Создать новый запрос с этим идентификатором фотографии
    $params = array(
        'method' => 'flickr.photos.getInfo',
        'api_key' => $key,
        'photo_id' => (string)$photo['id']
    );
    $info = simplexml_load_file($apiurl . http_build_query($params));
    
    // Теперь $info содержит значительный объем данных об изображении,
    // включая владельца, GPS-данные, даты, описание, теги и т.д.

    // Запросим также размеры для получения всех URL изображения:
    $params = array(
        'method' => 'flickr.photos.getSizes',
        'api_key' => $key,
        'photo_id' => (string)$photo['id']
    );
    $sizes = simplexml_load_file($apiurl . http_build_query($params));
    $small = $sizes->xpath("//size[@label='Small']");
    
    // Теперь создадим простой экран изображения, ссылающийся обратно
    // на Flickr, с отображением заголовка, GPS-данных и т.д.:
    echo <<<EOHTML
<div>
  <a href="{$info->photo->urls->url[0]}">
    <img src="{$small[0]['source']}"
         width="{$small[0]['width']}" 
         height="{$small[0]['height']}" />
  </a>
  <ul>
    <li>Title: {$info->photo->title}</li>
    <li>User: {$info->photo->owner['realname']}</li>
    <li>Date Taken: {$info->photo->dates['taken']}</li>
    <li>Location: {$info->photo->location->locality}, 
        {$info->photo->location->county},
        {$info->photo->location->region}, 
        {$info->photo->location->country}
    </li>
  </ul>
</div>
EOHTML;
}
?>

На рисунке 2 показана информация, выводимая Flickr. Результаты поиска арбалетов содержат фотографии и информацию о каждой из них (заголовок, пользователь, месторасположение, дата).

Рисунок 2. Пример отображения информации программой для работы с Flickr, приведенной в листинге 13
Рисунок 2. Пример отображения информации программой для работы с Flickr, приведенной в листинге 13

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

Просто научитесь программно обращаться к данным через API или при помощи web scraping, а затем используйте рассмотренные методы для доступа и итерирования по всем целевым данным.


Сохранение и формирование отчетов по извлеченным данным

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

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

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

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


Заключение

В статье была рассмотрена базовая структура XML-документов и простые методы их анализа в PHP с использованием SimpleXML. Мы также рассмотрели возможность аналогичной обработки HTML-файлов и основы обхода Web-сайта для сбора данных, недоступных в XML-формате. Описанные инструменты и приведенные в примерах рекомендации – это хорошая основа для того, чтобы начать осваивать глубинный анализ Web-сайтов. Однако одна статья не может охватить весь объем информации. Ссылки на дополнительную информацию по данной теме приведены в разделе Ресурсы.


Загрузка

ОписаниеИмяРазмер
Исходный кодdatamining_source.zip10 КБ

Ресурсы

Научиться

  • Оригинал статьи: Explore practical data mining and parsing with PHP (EN).
  • XML в википедии: описание спецификации XML.
  • Extensible Markup Language (XML) 1.0 (пятое издание) (W3C Recommendation, ноябрь 2008 года): конкретные подробности о возможностях XML.
  • Введение в XML (Дуг Тидвелл (Doug Tidwell), developerWorks, август 2002 года): информация о том, что такое технология XML, зачем она была разработана и как она используется в электронной коммерции. Обзор важных стандартов и интерфейсов программирования XML, а также два примера использования XML компаниями для решения бизнес-задач .
  • Учебное руководство по XML (W3Schools): уроки по XML и информация о передаче и хранении данных.
  • Документация по SimpleXML: информация о наборе инструментальных средств для преобразования XML в объект, который можно обрабатывать обычными селекторами свойств и итераторами по массивам в PHP.
  • Руководство для php|architect по Web Scraping с использованием PHP (Мэтью Тарленд (Matthew Turland)): информация о технологии web scraping с использованием различных технологий и инфраструктур (EN).
  • Язык XML Path (XPath) версия 1.0 (W3C Recommendation, ноябрь 1999 года): спецификация синтаксиса и семантики для использования функциональности XSLT и XPointer.
  • Приступая к работе с XPath (Бертран Портье (Bertrand Portier), developerWorks, май 2004 года): основы языка XML Path или XPath (EN).
  • Учебное руководство по XPath (W3Schools): урок по XPath и информация о том, как выполнять навигацию по элементам и атрибутам в XML-документе.
  • Спецификация RSS: подробная информация о формате синдикации Web-контента RSS.
  • Сервисы Flickr: информация о Flickr API, интерактивном управлении фотографиями и организации общего доступа к приложениям.
  • Как использовать регулярные выражения в PHP (Натан Гуд (Nathan A. Good), developerWorks, январь 2006 года): информация о проверке корректности вводимых пользователями данных, их анализе и анализе содержимого файлов, а также о переформатировании строк (EN).
  • PHP.net: – основной ресурс для разработчиков PHP-приложений.
  • Рекомендованный список литературы по PHP (Дэниел Крук (Daniel Krook) и (Карлос Ойос (Carlos Hoyos), developerWorks, март 2006 года): список литературы по PHP (Hypertext Preprocessor) для программистов и администраторов, составленный разработчиками Web-приложений, работающими в IBM.
  • PHP и многое другое: информация о PHP на developerWorks.
  • Zend Core for IBM. Используете базы данных с PHP? Готовая и простая в установке среда разработки и выполнения PHP-приложений с поддержкой IBM DB2 V9.
  • RSS-фид заголовков новостей из газеты The New York Times: поэкспериментируйте с RSS-фидом от The New York Times.
  • Сертификация IBM XML: информация о получении сертификата IBM-Certified Developer по XML и смежным технологиям.
  • developerWorks в Твиттере. Следите за твитами developerWorks.
  • Демонстрации по запросу на developerWorks. Смотрите на developerWorks предоставляемые по запросу демонстрации – от установки и настройки продуктов для начинающих до продвинутых функциональных возможностей для опытных разработчиков.

Получить продукты и технологии

  • PHP: универсальный язык сценариев для Web-разработки.

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=XML, Open source
ArticleID=811038
ArticleTitle=Практические приемы глубинного анализа и синтаксического разбора данных при помощи PHP
publish-date=04192012