воскресенье, 8 апреля 2018 г.

Установка и использование graphviz в CentOS7

Установка и  использование 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>
Результат: