GIT repositories

Index page of all the GIT repositories that are clonable form this server via HTTPS. Übersichtsseite aller GIT-Repositories, die von diesem Server aus über git clone (HTTPS) erreichbar sind.


A bunch of service scripts to convert, analyse and generate data. Ein paar Services zum Konvertieren, Analysieren und Generieren von Daten.

GNU octave web interface

A web interface for GNU Octave, which allows to run scientific calculations from netbooks, tables or smartphones. The interface provides a web form generator for Octave script parameters with pre-validation, automatic script list generation, as well presenting of output text, figures and files in a output HTML page. Ein Webinterface für GNU-Octave, mit dem wissenschaftliche Berechnungen von Netbooks, Tablets oder Smartphones aus durchgeführt werden können. Die Schnittstelle beinhaltet einen Formulargenerator für Octave-Scriptparameter, mit Einheiten und Einfabevalidierung. Textausgabe, Abbildungen und generierte Dateien werden abgefangen und in einer HTML-Seite dem Nutzer als Ergebnis zur Verfügung gestellt.



This PHP Software-Library is a collection of classes that I extend and improve since 2006 - that means since the "timestamp" when I realized that PHP supports object oriented programming. Before this time I did not use PHP because I could not get used to the mixed HTML/PHP4 script style like "<?... if(...) : ?> <HTML> <? else ... ?>" . As a migrant from the lands of C/C++, Java, and VB6, I needed a properly split "algorithm-view", good maintainability, polymorphism and something like std::exception. Hence, I had to wrap existing PHP functions with classes, which are now more elaborated, under one hood called SwLib and make life easier (and since published hopefully the world a better place for the community ;-} ).

Meine PHP Software-Library ist eine Sammlung von Klassen, die ich seit 2006 (als ich bemerkt habe, dass PHP Objektorientierung unterstützt) kontinuierlich erweitere. Als Migrant von C/C++, Java und VB6 konnte ich mich zuvor wegen der damals üblichen gemischten Schreibweise "<?... if(...) : ?> <HTML> <? else ... ?>" einfach nicht mit PHP anfreunden, die Sprache war mir zu unorganisiert. Was ich brauchte waren sauber getrennte Algorithmen- und Ausgabeblöcke, Wartbarkeit, Polymorphie und etwas wie std::exception. Daher musste ich die existierenden PHP-Funktionen mit Klassen "wrappen". Diese Klassen wurden nach und nach elaborierter und sind nun alle unter einer Haube namens SwLib. Das macht mir das Leben definitiv leichter, und seitdem ich die Library veröffentlicht habe hoffentlich auch das der Community.

Core features

The library core consists of classes that are implicitly loaded when the initialization method swlib::start(array $config) is called. However, you can switch off these implicit used features in the configuration array. In short the main advantages are:

  • Pre-defined class autoloading: The library main class swlib can scan multiple (configurable) directories for PHP-files and saves the contained classes in an index file. Hence, the folder structure is no more important for the autoloading of the organized classes. If a class is not known yet, the library will regenerate the class-index or throws an exception if the class is still not found. Furthermore, if there is more then one class with the same name, the library will throw an exception after the class indexing. This ensures that you do not have duplicates or redundant classes.

  • Advanced exception handling and generation: The class EException generates exceptions from PHP errors, failed assertions and warnings (if appropriate), and provides a global uncaught-exception handler. Exception handling is switched on by default. E.g. the division by zero is only a warning in PHP. In this critical case EException catches the warning and throws a MathException, so that you are sure that your script does not calculate with invalid numbers.

  • Session management: Automatically initializes the class Session , which handles the session management. Session system can be changed to MySql/file/RAM/remote by overloading this class.

  • Output buffering using the class OutputBuffer . The library enables the output buffering at startup (default), and handles the shutdown or error exit conditions like die().

  • Tracing capability: The library can be started with the class Tracer , which allows to generate additional logging output with trace levels (message priorities). To add trace messages you can use the methods Tracer::trace(), Tracer::trace_r() (like print_r()) or Tracer::traceException() in your code. The tracer is capable to send an email to the administrator if an uncaught exception occurs.

  • GPC-magic-quote-sanatizing: Because gpc magic quotes are more confusing than useful (and server settings dependent), the input variables $_GET, $_POST, $_FILES etc. are stripped, just as gpc-magic-quotes would always be switched off.

Other package classes

  • Advanced ZIP file handling: Class ZipFile can be used for recursive compression, inspection and extraction of files and folders. Throws ZipExceptions on error.

  • UTC and local dates: The classes UtcDate and LocalDate can be used to represent GMT based and local dates. Interface IDate is used to put both classes under one hood.

  • Shell process execution with stdout and stderr capturing: Using the ShellProcess class you can execute console programs, pass command line arguments and stdin (like typing in the console). To save CPU time, you can decide if the shell process shall be terminated ("killed") if your the client browser disconnects. By overloading the event methods you can implement your own on-the-fly-processing of the stdout and stderr output.

  • Elaborated uploading and downloading management with class ResourceFile . Helps you to move uploaded files easily and organizes the various download use cases, including ETAG, If-Modified-Since and HTTP Range (partial download). For large file you can slow down the download to save bandwidth.

  • EMail (SMTP) sending: Easy handling of generating and sending emails to multiple recipients using class Mailer . This class uses the interface IEMailContact (which just forces that user or address book classes provide a method called toEMailAddressString). A standard email contact class allows a direct use of the class without changing already implemented user classes.

  • Gregorian month and day calendar with events: The feature consists of the classes GregorianCalendar, GregorianMonthCalendarRenderer, GregorianDayCalendarRenderer, GregorianCalendarEvent and GregorianCalendarEventController. . The month calendar looks like a normal table-style calendar, where you can select the days. The day calendar is a timesheet, where the events are shown - and arranged as optimal as possible if they overlap. Each event has an own DIV block that you can fill with an event view as you want. All you have to do is to extend the event controller (e.g. to load events from a database or file) and the event renderer (to specify how the events shall look like). The rest only depends on you CSS (an example is published here ).

  • Ini file parsing and manipulation: Can parse an Initialization file into an associative array and write an array back to a INI file. The class to do this is class IniFile

  • LaTeX formula rendering: Provides rendering a LaTeX formula text into a transparent image ( class LaTeXRenderer ). All already existing formula-images are cached into files, there using the MD5 checksum of the formula. Returns the file path to the image file, so that the script can directly return the binary file contents. With this system it is possible to define a formula as an image reference: <img src="LaTex formula (URL encoded)" />. For security reasons, a protected function onTexFilter() can be overloaded to filter the LaTex text (either to check if a trusted user is logged in or check if there are shell commands embedded in the formula). Note: This class only works if LaTeX is installed on your server. A "web space" does normally not have this feature.

  • File system operations with exceptions:The class FileSystem is principally only a wrapper for the normal PHP filesystem functions, "except" that there are more detailed error messages if something goes wrong (using exceptions of cause). Furthermore the (static) functions are more elaborated, e.g. instead of using the PHP integrated function glob you can use FileSystem::find(), which can search for files/patterns recursively in subdirectories and apply advanced pattern filters.

  • HTTP Request: HttpRequest allows to send requests to other HTTP servers and fetch the content inclusive response headers. The headers are parsed and sanatized. The class can optionally throw an exception if the response is an error (e.g. 404).

    • Versioning: Versioning . This class provides methods to scan PHP files for javadoc style comments, collect readme files and version files to generate a unified published module in a destination folder. This target directory will then contain a zip file of the source directory, as well as the readme file, description, version, SHA1 checksum, MD5 checksum and a JSON encoded "contents file" with all contained classes and functions with their individual versions and other JavaDoc tags. The class can be also used to check published module for updates via HTTP request.


Der Librarykern besteht aus (meist kleinen) Klassen, die implizit geladen werden, wenn die Initialisierungsmethode swlib::start(array $config) aufgerufen wird. Es ist jedoch möglich die einzelnen Features in der Klassenkonfiguration explizit auszuschalten. Im Kern enthalten ist:

  • Vordefiniertes Klassen-Autoloading: Die Library-Haupklasse class swlib kann mehrere (konfigurierbare) Verzeichnisse nach PHP-Dateien durchsuchen und die enthaltenen Klassen in einer Index-Datei speichern. Folglich ist die Verzeichnisstruktur nicht mehr ausschlaggebend für das Autoloading der registrierten Klassen. Wenn eine Klasse noch nicht im Index bekannt ist, so indiziert die swlib automatisch die Verzeichnisse neu. Ist die neue Klasse danach immer noch nicht im Index, so wird eine Exception nach dem Scannen geworfen. Werden beim Indizieren Klassennamen-Duplikate gefunden, so wird ebenfalls eine Exception nach der Indizierung geworfen. Damit ist immer sichergestellt, dass keine redundanten Klassen existieren.

  • Erweitertes Handling und Generierung von Exceptions: Die Klasse class EException generiert Exceptions aus PHP-Fehlern, fehlgeschlagenen Assertions und Warnungen (falls das angebracht ist), und stellt weiterhin einen globalen "Uncaught-Exception"-Handler zur Verfügung. Beispielsweise wird die Warnung "Division durch Null" in eine MathException umgewandelt (weil das einfach eine unterbewertete aber kritische Sache ist). Dadurch hast Du eine höhere Sicherheit, dass Dein Skript nicht mit falschen Zahlen rechnet und schlussendlich "NaN" in der Datenbank steht.

  • Session-Management: Automatisch wird die class Session initialisiert, welche die Nutzer-Session verwaltet. Durch die Nutzung einer Klasse ist es einfacher, das Session-Management vom PHP-Standard auf Datenbank, eigene Dateien oder RAM (memcache) umzustellen - außer dieser Klasse muss nichts geändert werden.

  • Output-Buffering mit der OutputBuffer . Die Library schaltet die Ausgabepufferung beim Start automatisch ein (default), und behandelt die Ausgabe der gepufferten Daten beim Beenden des Skripts (auch im Falle eines eines Fehlers bzw. uncaught Exception, wie z.B. bei die().)

  • Tracing: Die Bibliothek kann mit der class Tracer gestartet werden. Diese Klasse ermöglicht es, zusätzliche Log-Informationen mit Trace-Levels (Messageprioritäten) auszugeben. Das Trace-Log enthält immer die Zeit seit dem Skriptstart, die Quelldatei und die Zeile (bei Exceptions auch ein Backtrace). Um Traceausgaben hinzuzufügen, werden die statischen Klassenfunktionen Tracer::trace(), Tracer::trace_r() (wie print_r()) oder Tracer::traceException() verwendet. Der Tracer kann bei einer Exception dem Administrator eine eMail senden.

  • GPC-magic-quote-Retouchierung: Weil GPC-Magic-Quotes mehr verwirren als einen wirklichen Nutzen bringen (und noch Server-abhängig sind), werden sie beim Start der Library in $_GET, $_POST, $_FILES, usw. entfernt - jeder sollte selbst entscheiden können wann und wie er die "Sanatizing" der Eingabe macht. Hiermit werden die Server-Abhängigkeiten kompensiert.

Weitere Klassen im Paket

  • Erweitertes ZIP-Datei Handling: Die Klasse ZipFile hat statische Funktionen, um Dateien und Verzeichnisse (rekursiv) zu packen, entpacken und zu inspizieren. Wirft ZipExceptions, wenn Fehler auftreten.

  • UTC und lokale Zeiten: Die Klassen UtcDate and LocalDate representieren (und ermöglichen auch das Rechnen mit) UTC-Zeiten ("GMT") und lokalen Zeitangaben. Die Schnittstelle interface IDate bringt beide unter eine Haube, so dass Du in Funktionen, die als Parameter ein Datum / eine Zeit haben, das Interface verwenden kannst - egal ob die Zeit lokal oder UTC ist.

  • Shell-Prozesse mit Erfassung der stdout und stderr -Ausgaben: Mit der ShellProcess können Konsolenprogramme auf einfache Weise ausgeführt und Kommandozeilenargumente (und auch stdin, wie eintippen im Shell-Window) übergeben werden. Um Rechenleistung einzusparen kannst Du angeben, ob das Programm beendet werden soll ("terminate"/"kill"), falls der Nutzer das Browserfenster schließt oder die Verbindung abbricht. Durch Ableiten und überladen der Eventmethoden ist es auch möglich, eine eigene On-The-Fly-Verarbeitung der stdout und stderr Ausgabe zu implementieren.

  • **Elaboriertes Upload und Download-Management ** mit der Klasse ResourceFile . Diese stellt nicht nur Wrappers zum Verschieben hochgeladener Dateien zur Verfügung, sondern ermöglicht implizit auch Datei-Downloads mit ETAG, If-Modified-Since und HTTP-Range (partielles Herunterladen oder Fortfahren mit einem Download nach Zusammenbrechen der Verbindung). Weiterhin ist es möglich, die Downloads (z.B. für große Dateien) zu verlangsamen.

  • **EMails (SMTP) senden: ** Eine einfache Art, Emails zu erstellen und an mehrere Empfänger zu versenden kann mit dem class Mailer bewerkstelligt werden. Die Klasse verwendet das interface IEMailContact, welches lediglich sicherstellt, dass User- oder Adressbuchklassen die benötigte Methode toEMailAddressString() enthalten. Mit einer Standard-Implementierung dieser Schnittstelle (class EMailContact) können ohne Änderungen von bereits existierenden Nutzerklassen eMails verschickt werden.

  • Gregorianischer Monats- und Tageskalender mit Events: Dieses Feature besteht aus den Klassen GregorianCalendar, GregorianMonthCalendarRenderer, GregorianDayCalendarRenderer, GregorianCalendarEvent and GregorianCalendarEventController. . Der Monatskalender sieht wie ein gewöhnlicher tabellarischer Kalender aus. Er dient in meinem Anwendungsfall in erster Linie zum Anwählen des Datums für den Tageskalender. Wenn Events an einem Tag eingetragen sind, ist eine entsprechende Markierung im Monatskalender sichtbar. Der Tageskalender ist ein Timesheet, in dem Ereignisse angezeigt werden. Die Ereignisse werden bei Überschneidung automatisch möglichst platzsparend angeordnet. Jedes Ereignis ist in einem eigenen DIV-Block dargestellt, deren Inhalt Du komplett selbst bestimmen kannst. Alles, was dazu nötig ist, ist den Event-Controller zu überladen (um die Ereignisse aus einer Datenbank etc. zu laden) und den Event-Renderer zu überladen (Um die Ereignisse darzustellen). Der Rest wird von den genannten Klassen erledigt, so dass nur noch eine Formatierung über CSS gemacht werden muss. Ein Beispiel-CSS steht im Artikel des Features mit dabei.

  • INI-Datei Parsing und Manipulation: Kann Initialisierungsdateien in ein assoziatives Array lesen und von einem solchen Array eine Ini-Datei schreiben. Die entsprechende Klasse heißt class IniFile .

  • LaTeX-Formel-Rendering: Hiermit können LaTeX-Formeln in ein transparentes Bild gerendert weden ( class LaTeXRenderer ). Alle bereits gerenderten Formeln werden in Bilddateien gecached, wobei die MD5-Checksumme der Formel als Dateiname verwendet wird. Zurückgegeben wird der (interne) Cachedatei-Pfad einer Formel, so dass das Bild direkt in Binärform zum Browser gesendet werden kann. Damit kann gemäß <img src="LaTex formula (URL encoded)" /> eine Formel direkt im Bild-Link angegeben werden. Aus Sicherheitsgründen gibt es eine Methode protected onTexFilter(). Damit kann nochmals überprüft werden, ob ein vertrauenswürdiger Nutzer eingeloggt ist, oder es können Shell-Befehle, die in LaTeX möglich sind, herausgefiltert werden. Beachte: Diese Klasse funktioniert nur dann, wenn auch LaTeX auf dem Server installiert ist, dies ist bei einem "normalen" Webspace nicht der Fall.

  • Dateisystem-Operationen mit Exceptions: Die class FileSystem ist prinzipiell nur ein Wrapper für die integrierten Dateisystem-Funktionen in PHP - mit der Besonderheit, dass Exceptions mit detaillierten Fehlermeldungen geworfen werden. Weiterhin beinhaltet die Klasse erweiterte Funktionen, z.B. kann anstatt der integrierten Funktion glob die Funktion FileSystem::find() verwendet werden. Diese durchsucht Verzeichnisse auch rekursiv mit erweiterten Filtern/Patterns.

  • HTTP-Request: HttpRequest dient zum Absenden von GET/POST requests an andere Webserver. Abgefangen und aufbereitet werden neben dem Response-Inhalt auch die Headerinformationen.

  • Package Publishing und Versionsprüfung: Versioning scannt angegebene "Package"-Verzeichnisse nach .class.php-Files, liest die Dokumentationskommentare heraus und erstellt Code-Checksummen über die alle Dateien im Package für eine Versionsprüfung. Weiterhin enthält die Klasse statische Funktionen, die mithilfe dieser Methoden ein "Repository" erstellen können, und für ein Package eine Versionsprüfung über HTTP-Lookup (auf ein solches Repository) durchführen können.


The libeary is available as http GIT repository here


Die Bibliothek kann mit GIT heruntergeladen werden, das HTTP-Repository ist here