[PYTHON] Continuation: j'ai essayé d'introduire l'outil de génération de diagramme blockdiag

■ Présentation

La dernière fois, j'ai introduit l'outil de génération de diagramme blockdiag dans CentOS6.5.

Cette fois, je décrirai les astuces lors de son utilisation via le serveur web.

■ Prémisse

■ Aperçu

-Si la commande blockdiag est définie sur le script, considérez qu'elle sera exécutée par l'utilisateur / le groupe "apache".

-Il est nécessaire d'accorder une autorisation d'écriture à l'utilisateur ou au groupe Apache sur la destination de génération du diagramme.

-Lors de l'exécution de la commande blockdiag, il est nécessaire de spécifier explicitement la police car elle est exécutée par l'utilisateur apache.

■ Répertoire de destination de sortie

À partir de la racine du document par défaut

# mkdir /var/www/html/data
# chown .apache /var/www/html/data

■ Exemple de script

# vi /var/www/html/index.php
--------------------
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<h1>BlockDiag Online</h1>
<form action='index.php' method='post'>
<textarea name='text' cols='120' rows='20'>
blockdiag admin {
   // Set M17N text using label property.
   A [label = "Ki"];
   B [label = "Accepté"];
   C [label = "Tour"];
   D [label = "Conclusion"];

   A -> B -> C -> D;

   // Use M17N text directly (need to quote).
printemps->été->l'automne->hiver;

   // Use M17N text including symbol characters (need to quote).
   "Le printemps est l'aube" -> "été=Nuit" -> "l'automne.soirée" -> "hiver&faire un effort";
}
</textarea>
<hr />
<input type='submit' value='conversion' />
</form>

<?php
  if (isset($_POST['text'])){
    //Définissez le chemin, etc.
    $dir = "data/";
    $font = "/usr/share/fonts/ipa-gothic/ipag.ttf";
    $filename = sprintf("svg%04d",mt_rand(0,9999));
    $fd = sprintf("./{$dir}%s.diag",$filename);
    $ff = sprintf("./{$dir}%s.svg" ,$filename);
    $text = $_POST['text'];
    
    //Créer un diagramme
    file_put_contents($fd,$text);
    
    //exécution de la commande blockdiag
    $command = sprintf("blockdiag -f {$font} -Tsvg %s",$ft);
    $Err = `$command`;
    printf("command: %s<br />",$command);
    print "<hr />";
    
    if (file_exists($ff)) {
      echo "$ff existe<br />";
      printf("ff: %s<br />",$ff);
      print "<img src=\"{$ff}\" />";
    } else {
      echo "<span style='color:#ff0000;'>$ff n'existe pas. Semble avoir échoué à générer<br />";
      echo "En cas de succès, le fichier SVG suivant sera généré</span><br />";
      print "<img src=\"/cp_root/nippon.svg\" />";
    }
  }
?>
</body>
</html>

Accorder l'autorisation d'exécution

# chmod 755 /var/www/html/index.php

■ Exécuter à partir du navigateur

http://example.com/index.php

20141008_blockdiag_sample01.png


▽ Résultat de la conversion

20141008_blockdiag_sample02.png

■ Vérifiez le fichier généré

# ls -l /var/www/html/data/svg5038.svg
-rw-r--r--1 apache apache 7465 8 octobre 20:04 2014 /var/www/html/data/svg5038.svg

Je pense que le contenu est devenu un peu utile pour un usage réel.

C'est tout.

Recommended Posts

Continuation: j'ai essayé d'introduire l'outil de génération de diagramme blockdiag
J'ai essayé d'introduire l'outil de génération de diagramme blockdiag
J'ai essayé de présenter Pylint
J'ai essayé de déplacer le ballon
J'ai essayé d'estimer la section.
J'ai essayé de résumer la commande umask
J'ai essayé de reconnaître le mot de réveil
J'ai essayé l'outil de visualisation OSS, sur-ensemble
J'ai essayé de résumer la modélisation graphique.
J'ai essayé d'estimer le rapport de circonférence π de manière probabiliste
J'ai essayé de toucher l'API COTOHA
J'ai essayé Web Scraping pour analyser les paroles.
J'ai essayé d'optimiser le séchage du linge
J'ai essayé de sauvegarder les données avec discorde
Qiita Job J'ai essayé d'analyser le travail
LeetCode j'ai essayé de résumer les plus simples
J'ai essayé de mettre en œuvre le problème du voyageur de commerce
J'ai essayé de vectoriser les paroles de Hinatazaka 46!
J'ai essayé d'entraîner la fonction péché avec chainer
J'ai essayé de représenter graphiquement les packages installés en Python
Quand j'ai essayé d'introduire python3 dans atom, je suis resté coincé
J'ai essayé de détecter l'iris à partir de l'image de la caméra
J'ai essayé de résumer la forme de base de GPLVM
J'ai essayé de toucher un fichier CSV avec Python
J'ai essayé de prédire le match de la J League (analyse des données)
Suite ・ J'ai essayé de créer Slackbot après avoir étudié Python3
J'ai essayé d'approcher la fonction sin en utilisant le chainer
J'ai essayé de mettre Pytest dans la bataille réelle
[Python] J'ai essayé de représenter graphiquement le top 10 des ombres à paupières
J'ai essayé de visualiser les informations spacha de VTuber
J'ai essayé d'effacer la partie négative de Meros
J'ai essayé de résoudre le problème avec Python Vol.1
J'ai essayé de simuler la méthode de calcul de la moyenne des coûts en dollars
J'ai essayé de refaire la factorisation matricielle non négative (NMF)
J'ai essayé d'identifier la langue en utilisant CNN + Melspectogram
J'ai essayé de compléter le graphe de connaissances en utilisant OpenKE
J'ai essayé de classer les voix des acteurs de la voix
J'ai essayé de dessiner un diagramme de configuration à l'aide de diagrammes
[Python] J'ai essayé de résumer le tableau, la méthode de génération du dictionnaire, la méthode de boucle, la notation d'inclusion de liste
J'ai essayé de compresser l'image en utilisant l'apprentissage automatique
J'ai essayé de résumer les opérations de chaîne de Python
J'ai créé un outil pour générer automatiquement un simple diagramme ER à partir de l'instruction CREATE TABLE
J'ai essayé de trouver l'entropie de l'image avec python
J'ai essayé de découvrir les grandes lignes de Big Gorilla
J'ai essayé de porter le code écrit pour TensorFlow sur Theano
[Courses de chevaux] J'ai essayé de quantifier la force du cheval de course
J'ai essayé de simuler la propagation de l'infection avec Python
J'ai essayé d'obtenir les informations de localisation du bus Odakyu
J'ai essayé de trouver la moyenne de plusieurs colonnes avec TensorFlow
J'ai essayé de notifier les informations de retard de train avec LINE Notify
J'ai essayé de résumer le code souvent utilisé dans Pandas
J'ai essayé d'afficher l'heure et la météo d'aujourd'hui w
J'ai essayé de résumer les commandes souvent utilisées en entreprise
J'ai essayé d'implémenter la fonction d'envoi de courrier en Python
[TF] J'ai essayé de visualiser le résultat de l'apprentissage en utilisant Tensorboard
[Apprentissage automatique] J'ai essayé de résumer la théorie d'Adaboost
J'ai essayé d'énumérer les différences entre java et python