Установка и использование graphviz в CentOS7
1. Просмотр доступных пакетов graphviz
# yum list available 'graphviz*'
2. Установка всех пакетов graphviz
# yum install 'graphviz*'
3. Проверка работы системы graphviz
Создаем файл temp.dot
# touch temp.dot
Помещаем в файл следующее:
digraph G{
Один->Два->Три->Четыре->Пять->Шесть->Десять;
Три->Десять;
Четыре->Десять;
}
Конвертируем данные в граф с представлением в png
# dot -Tpng temp.dot -o temp.png
После ключа T указываем тип выходного файла
Получим файл png с изображением:
4. Установка связки php с GraphViz
# yum install php-pear-Image-GraphViz
# service httpd restart
5. Создадим файл network.php с содержимым
<?php
require_once 'Image/GraphViz.php';
$gv = new Image_GraphViz();
$gv->addEdge(array('wake up' => 'visit bathroom'));
$gv->addEdge(array('visit bathroom' => 'make coffee'));
$gv->image();
?>
При просмотре этого файла в браузере получим изображение
Основными объектами являются узлы («node») и ребра («edge»)
Пример описания узла и связей:
<?php
require_once 'Image/GraphViz.php';
$gv = new Image_GraphViz();
$gv->addNode(
'Node1',
array(
'URL' => 'http://yandex.su',
'label' => 'Яндекс',
'shape' => 'box3d',
'color' => 'green',
'style'=>'filled',
'fillcolor'=>'lightgrey'
)
);
$gv->addEdge(array('Node1' => 'Node2'));
$gv->addEdge(array('Node2' => 'Node3'),
array('color' => 'red',
'fontcolor'=>"blue",
'label'=>"ссылка на Google",
'URL'=>"http://www.google.com"
)
);
$gv->image();
?>
Результат:
Попытка вставить код php в имеющуюся отформатированную страницу приведет к ошибке
Это связано с тем, что код, который генерит GraphViz.php имеет первую строку
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
При наличии xml-фрагмента браузер не допускает других символов перед <?xml.
Обойти это можно создав другую страницу, которая будет получать код основной с построенным графом.
Пример файла забирающего данные с другой страницы и выводящего дополнительные данные до и после графа:
<p>123</p>
<?php
date_default_timezone_set('Etc/GMT-3');
$url = "http://10.10.49.162/network.php";
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11');
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
$output = curl_exec($ch);
?>
<p>456</p>
Результат: