Um mich abzulenken hab ich mir erlaubt ein Feature eines Forumbenutzers von hier nach zu bauen - hoffentlich ist er mir nicht böse
An dieser Stelle zolle ich ihm mein Respekt für diese elegante Idee :thumbs1:
Und zwar hat combie ein Bild in der Signatur wo sich ständig der angezeigte Spruch ändert (nach laden des Bildes):
Durch kopieren der BildURL und weglassen der spruch.png sieht man welche Sprüche er allgemein in seiner Datenbank hat.
Nun habe ich mir das als Grundlage genommen und ein kleines PHP Script geschrieben über das man Sprüche in eine SQLite Datenbank eintragen kann, mit einem bash Script alle 10 Sekunden einen neues SpruchBild erzeugen und auch eine solche Auflistung wie bei combie anzeigen lassen kann.
Allerdings muss ich gestehen das mir der Font noch nicht sonderlich gefällt... Aber vielleicht äussert sich combie hierzu ja, welchen er verwendet
Als Voraussetzung benötigt ihr einen Webserver mit PHP und dem zusätzlichen Paket php5-gd und php5-sqlite
Dann ein Verzeichnis erstellen und die Angehängten Dateien dort rein kopieren, sowie den Besitzer des Verzeichnisses auf www-data stellen damit dieser dort schreiben und die SpruchBild Datei erstellen kann:
mkdir /var/www/sprichwoerter
#.. index.php und font datei rein kopieren ..
chown -R www-data:www-data /var/www/sprichwoerter
Den Pfad könnt ihr aber natürlich beliebig verändern.
Ganz oben in der index.php kann man ein paar Einstellungen vornehmen, wie größe des Textes, maximale Breite bis ein Zeilenumbruch erzeugt werden soll, ob der Text Fett dargestellt werden soll, wo sich die Font Datei befindet usw. Ausserdem legt man da auch einen Standard Spruch fest damit beim erzeugen der Datenbankdatei zumindest ein Spruch drin steht.
Hier die index.php:
Spoiler anzeigen
<?php
// v0.1
error_reporting(E_ALL);
ini_set('track_errors', 1);
ini_set('display_errors', 1);
ini_set('log_errors', 1);
$sqlitedb = ".db.sprueche";
//default Spruch
$default = "Lernen ist ein aktiver Prozess. Wir lernen, indem wir es tun.";
$Font = './arialbd.ttf'; // ./path/to/fontfile in /var/www
$maxWidth = 448;
$textSize = 10;
$ShowAsBold = 0; // Text in Fettdruck anzeigen? 1=ja , 0=nein
$SpruchBildDatei = "spruch.png";
//----------------------------------------------------------------------------------------------------------
if (!file_exists($Font)) { echo "<b>FATAL ERROR: Cant locate Fontfile ".$Font."!</b>\n"; exit(); }
if (!file_exists($sqlitedb)) {
create_db();
//} else {
// check_db();
}
// Create Image and exit
if (isset($_GET["create"])) { create_image(); exit(); }
// Add new Spruch to db
if (isset($_POST["Spruch"])) {
if (empty($_POST["Spruch"])) { echo "<b>ERROR: Empty Spruch given!</b>\n"; exit(); }
$TEXT = $_POST["Spruch"];
$AUTOR = $_POST["Autor"];
$db = db_con($sqlitedb);
$sql = "SELECT spruch FROM sprueche WHERE spruch LIKE \"".$TEXT."\"";
$query = $db->query($sql);
$result = $query->fetch(PDO::FETCH_ASSOC);
if (!empty($result)) { echo "<b>ERROR: '".$TEXT."' already added!</b>\n"; exit(); }
if (!empty($AUTOR)) {
$sql = "INSERT INTO sprueche (spruch,autor) VALUES ('".$TEXT."','".$AUTOR."')";
} else {
$sql = "INSERT INTO sprueche (spruch) VALUES ('".$TEXT."')";
}
$query = $db->query($sql);
if (!empty($AUTOR)) { $TEXT .= "\r\nAutor: ".$AUTOR; }
create_image($TEXT);
exit();
}
// display add mask
if (isset($_GET["add"])) {
echo "<form name='addform' action='".$_SERVER['PHP_SELF']."' method='POST'>\n";
echo "<table>\n";
echo "<tr><td>Spruch:</td> <td> <input type='text' name='Spruch' min='5' size='80' required='required' autofocus='autofocus'></td></tr>\n";
echo "<tr><td>Autor:</td> <td> <input type='text' name='Autor' size='10'></td></tr>\n";
echo "<tr><td><input type='submit' value='Add'></td><td> </td></tr>\n";
echo "</table>\n";
echo "</form>\n";
exit();
}
//----------------------------------------------------------------------------------------------------------
//display added sprueche
$db = db_con($sqlitedb);
$sql = "SELECT spruch,autor FROM sprueche ORDER BY id DESC";
$query = $db->query($sql);
while($result = $query->fetch(PDO::FETCH_ASSOC)){
$TEXT = $result['spruch'];
$AUTOR = $result['autor'];
if (!empty($AUTOR)) { $TEXT .= "<br/>Autor: ".$AUTOR; }
echo $TEXT."<br/>\n";
echo "<hr>\n";
}
//----------------------------------------------------------------------------------------------------------
function create_image($TEXT = "") {
global $sqlitedb, $Font, $maxWidth, $textSize, $ShowAsBold;
if (empty($TEXT)) {
$db = db_con($sqlitedb);
$sql = "SELECT count(id) FROM sprueche;";
$query = $db->query($sql);
$result = $query->fetch(PDO::FETCH_ASSOC);
$randomID = rand(1, $result['count(id)']);
$sql = "SELECT spruch,autor FROM sprueche WHERE id=\"$randomID\"";
$query = $db->query($sql);
while($result = $query->fetch(PDO::FETCH_ASSOC)){
$TEXT = $result['spruch'];
$AUTOR = $result['autor'];
if (!empty($AUTOR)) { $TEXT .= "\r\n".$AUTOR; }
}
}
$width = strlen($TEXT) + 5;
$width = 500;
$height = 50;
$img = ImageCreate($width, $height);
//Lime Hintergrund setzen, fuer leichteres Entfernen, um spaeter Transparenten Hintergrund zu erhalten.
$color['lime'] = ImageColorAllocate($img, 0x00, 0xFF, 0x00);
//Schwarze Farbe setzen
$color['black'] = ImageColorAllocate($img, 0x00, 0x00, 0x00);
$black = ImageColorAllocate($img, 0, 0, 0);
$white = ImageColorAllocate($img, 255, 255, 255);
$orange = ImageColorAllocate($img, 220, 210, 60);
$red = ImageColorAllocate($img, 255, 0, 0);
$yellow = ImageColorAllocate($img, 255, 255, 0);
$TEXT = addslashes($TEXT);
$textColor = $color['black'];
//$px = (imagesx($img) - 7.5 * strlen($string)) / 2;
//ImageFill($img, 0, 0, $white);
//ImageString($img, 2, 26, 20, $TEXT, $black);
//ImageString($img, 3, $px, 9, $TEXT, $orange);
// Split in multiple lines
$words = explode(' ', $TEXT);
$lines = array();
$TEXTline = "";
foreach ($words as $word) {
$box = imagettfbbox($textSize, 0, $Font, $TEXTline . $word);
$width = $box[4] - $box[0];
if ($width > $maxWidth) {
$TEXTline = trim($TEXTline);
$TEXTline .= "\n";
}
$TEXTline .= $word . ' ';
}
// Write the text in the image
if ($ShowAsBold === 1) {
imagettftext($img, $textSize, 0, 10, $textSize + 10, $textColor, $Font, $TEXTline);
} else {
imagestring($img, 2, 25, 25, $TEXTline, $textColor);
}
//Hintergrundfarbe entfernen (transparent)
imagecolortransparent($img, $color['lime']);
//PNG erzeugen
//header("Content-type: image/png");
//header("Refresh: 10; url=".$_SERVER['SCRIPT_NAME']);
ImagePNG($img, $SpruchBildDatei);
ImageDestroy($img);
}
//______________________________________________________________________________________
// sqlite
function create_db() {
global $sqlitedb, $default;
$db = db_con($sqlitedb);
$sql = "CREATE TABLE IF NOT EXISTS sprueche (id INTEGER PRIMARY KEY,spruch TEXT,autor TEXT)";
$query = $db->query($sql);
$sql = "INSERT INTO sprueche (spruch) VALUES ('".$default."')";
$query = $db->query($sql);
}
function check_db() {
global $sqlitedb;
$db = db_con($sqlitedb);
$sql = "SELECT count(name) FROM sqlite_master WHERE type='table' AND name='sprueche'";
$query = $db->query($sql);
$result = $query->fetch(PDO::FETCH_ASSOC);
if ($result['count(name)'] !== 1) { create_db(); }
}
// DB connect
function db_con($dbfile) {
if (!$db = new PDO("sqlite:$dbfile")) {
$e="font-size:23px; text-align:left; color:firebrick; font-weight:bold;";
echo "<b style='".$e."'>Fehler beim öffnen der Datenbank:</b><br/>";
echo "<b style='".$e."'>".$db->errorInfo()."</b><br/>";
die;
}
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $db;
}
// keine weitere be/verarbeitung notwendig. ansonsten "db_queryp" nutzen!
function db_query($db="", $sql) {
if (empty($db)) { $db = db_con(); }
$result = $db->query($sql) or db_error($sql,$db->errorInfo());
#$db->close();
return $result;
}
//Function to handle database errors
function db_error($sql, $error) {
die('<small><font color="#ff0000"><b>[DB ERROR]</b></font></small><br/><br/><font color="#800000"><b>'.$error.'</b><br/><br/>'.$sql.'</font>');
}
//Add HTML character incoding to strings
function db_output($string) {
return htmlspecialchars($string);
}
//Add slashes to incoming data
function db_input($string) {
if (function_exists('mysql_real_escape_string')) {
return mysql_real_escape_string($string);
}
return addslashes($string);
}
?>
[/php][/spoiler]
Umgangsbeschreibung zur index.php:[list]
[*]Surft man einfach nur das Verzeichnis an werden die Sprüche aufgelistet.
[*]Ruft man die index.php (oder nur das Verzeichnis) mit dem Zusatz [b]?add[/b] auf erscheint eine Eingabemaske um einen neuen Spruch einzutragen, wobei Autor optional ist also nicht mit angegeben werden muss.
[*]Um eine neue Bilddatei zu erzeugen wird der Zusatz [b]?create[/b] verwendet, was auch das bash Script nutzt.
Standardmäßig wird dadurch im selben Verzeichnis eine Datei [b]spruch.png[/b] erzeugt.[/list]
Um dann die Sprüche bzw das SpruchBild in die Signatur zu kriegen braucht ihr nichts anderes tun als den [ img ] Tag auf die BildURL als Signatur einzutragen :)
[b]create.sh[/b]
[spoiler][code]#!/bin/bash
EVERY=5
while :; do
wget http://127.0.0.1/sprichwoerter/?create
sleep $EVERY
done
Alles anzeigen
Am besten das Script in einem screen starten, oder mit nohup vor dem Ausführbefehl.[/spoiler]
Ein Manko hat mein Script bisher aber noch: Es erstellt willkürlich ein SpruchBild was nicht immer ein anderes is. Man könnte das auch noch ein bisschen erweitern indem man im bash Script speichert welche ID's in der Datenbank sind, sich speichert welche zuletzt aufgerufen wurde und beim aufruf von ?create die zu erstellende spruchID mit übergibt - um sicher zu stellen das auch wirklich immer ein anderes SpruchBild erzeugt wird.... Vielleicht mach ich das in der nächsten Version wenn ich dazu noch Lust hab