Random Spruchbild für Signatur

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Um mich abzulenken hab ich mir erlaubt ein Feature eines Forumbenutzers von hier nach zu bauen - hoffentlich ist er mir nicht böse :daumendreh2:

    Spoiler anzeigen

    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):
    spruch.png
    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 :fies:

    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:

    Code
    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

    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 :bussi2:

  • Außerdem würde ich das add aber noch mit einer Sicherheit versehen...oder soll jeder auch schweinische Dinge in die Datenbank posten können?


    Hm wie generiert sich ein Bild denn selber :huh:

    Das Bild ist eine PHP datei und zeigt sich selber an...ist doch ganz einfach!

    modrewrite sei dank!

    Wobei du ModRewrite noch nicht einmal bräuchtest...aber die meisten Foren akzeptieren ja nur jpg oder png

    Einmal editiert, zuletzt von MrBecks (12. September 2014 um 15:33)

  • Hm naja das würde aber ggf eine Anpassung des Webservers erfordern, da zum einen nicht jeder apache2 verwendet und zum anderen ggf mod_rewrite ausgeschaltet ist, und beim apache2 für die (default)seite auch noch AllowOverride auf FileInfo oder All gestellt werden..

    Ein weiterer Nachteil davon wäre aber auch das man wirklich mit random arbeiten müsste, also nicht der Reihe nach die SpruchBilder erzeugen könnte - es sei denn man speichert die zuletzt erzeugte ID eines Spruches in eine Temporäre Datei, was ich aber nicht so schön fänd.


    Leider haben meine bisherigen Versuche damit aber nicht funktioniert

    a2enmod rewrite && /etc/init.d/apache2 restart

    Apache Configuration
    RewriteEngine On
    RewriteRule spruch\.png index.php?create

    Tut sich leider nix... :(

  • dreamshader habe ich mein Gedöns schon zukommen lassen.

    Dann kann ich es ja auch, hier und jetzt, mal öffentlich präsentieren.
    ( Siehe Anhang )

    Der Code ist mit der heißen Nadel gestrickt.
    War nicht für die Veröffentlichung gedacht und ich habe auch Heute keine Lust und Zeit ihn zu fegen und zu kämmen.

    Die Frage mit dem Font sollte sich dann auch gleich mit klären ;)

    :D Viel Spass mit der Bastelstube :D

    Zitat

    hoffentlich ist er mir nicht böse


    Ganz im Gegenteil!
    Es ist mir eine Ehre.

  • Vielen Dank für dein Script combie :thumbs1:


    Wie hast du deinen apache2 eingestellt damit die .htaccess funktioniert? Bei mir will er nämlich immer noch nicht :(

    Apache Configuration
    echo 'RewriteEngine On' > /var/www/sprichwoerter/.htaccess
    echo 'RewriteRule ^spruch\.png$  index.php?create=1' >> /var/www/sprichwoerter/.htaccess
    chmod 600 /var/www/sprichwoerter/.htaccess
    chown www-data:www-data /var/www/sprichwoerter/.htaccess

    Und in der /etc/apache2/sites-enabled/000-default für /var/www/ hab ich AllowOverride All ... apache2 restarted ... trotzdem will er nicht :-/

    //EDIT: Fehler gefunden - es sah nur so aus als würde nichts gehen - musste in meiner index.php 2 Zeilen nach //PNG erzeugen anpassen:
    - header("Content-type: image/png"); ... einkommentieren
    - ImagePNG($img, $SpruchBildDatei); ... ändern in: ImagePNG($img);

    Und nu läuft das auch :)
    spruch.png

  • dreamshader: möchtest du auch optional einen Autor speichern, oder kannste darauf verzichten?
    Wenn du auf einen Autor verzichten kannst wäre das ziemlich einfach durch fwrite(); zum rein schreiben (pro Zeile ein Spruch) und file(); um die Textdatei in ein Array zu packen - anschließend kann man mithilfe von array_rand(); oder rand(); einen zufälligen Eintrag raus picken, was eine Zahl ausgeben würde und diese nutzt man dann für das Array.

    Zum Beispiel:

    Eintrag schreiben:

    Zufälligen Spruch aus- lesen/geben:
    [code=php]
    $spruecheArray = file('sprueche.txt');

    $random = array_rand($spruecheArray);
    //$random = rand(0, count($spruecheArray) - 1);

    print $spruecheArray[$random];
    [/php]
    .. also entweder array_rand(); oder rand(); .. ist imho relativ egal was man nutzt ;)

    In meiner Version ist aber auch noch ein Bug wegen Zeilenüberlänge drin sofern man $ShowAsBold = 0 setzt, auf 1 funktioniert das allerdings.. Ich werde deshalb mal versuchen combies Code diesbezüglich bei mir einzubauen, und auch deinen Wunsch mit einer einfachen Textdatei umzusetzen ;)
    Und eine Passwordabfrage zum Eintragen bau ich auch gleich ein.

  • Hey meigrafd,
    Klasse ... super. Autoren und den Krams brauch ich z.B. nicht. Könnte man aber der Einfachheit halber evtl. mit Trenner ans Ende der Zeile (also quasi als eigenes "Feld") packen.
    Ich denke halt, dass es einfacher und flexibler ist, die Texte einfach in eine Datei zu schreiben.
    Ich hätte auf der bplaced Site zwar auch eine postgres- und eine mysql-Datenbank, aber ich finde das dann etwas oversized ;) ...
    Und nur in einem Array in einer PHP-Datei ... passt schon, aber birgt immer die Gefahr, beim Erweitern irgendwo einen Tippfehler rein zu bekommen und den dann suchen ... :baeh2:

    Schön, wär ja wirklich eine Idee die beiden Teile - also das von Dir und das von combie - zu verheiraten.

    Ach ja: da ich weiss, dass Du ein Perfektionist bist: Rich Text wäre natürlich noch besser ;) ... aber das ist nur mal so eine Idee ( quasi zum anfixen ;) ).

    cheers,
    -ds-

  • Fertig.

    index.php

    Und in der /etc/apache2/sites-enabled/000-default für /var/www/ muss noch AllowOverride All gesetzt werden sowie anschließend: /etc/init.d/apache2 restart

  • Na super ... irre,
    ja mal sehen ... das lad' ich dann mal gleich auf den Server hoch
    Dann noch die Sprüche aus dem Archiv in eine Textdatei und dann schau mer amoi :) ...
    Wenn mich das STM32-Board und meine derzeitige Arduino-RPi Anordnung aus ihren Fängen entlassen schaffe ich es vielleicht, das bis Montag zum Laufen zu bekommen ...

    cheers und danke, ist echt ne prima Sache,
    -ds-

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!