5
Mär

PHP-Commandline-Parameter mit Console_Getopt

categories PHP, Tutorials    

Aus der Historie heraus verwenden die meisten Entwickler PHP hauptsächlich als serverseitige Skriptsprache zur Erstellung von Webseiten oder Webanwendungen. Mit PHP kann man jedoch noch viel mehr machen: es bietet ein Commandline-Interface, welches ermöglicht, auch unter verschiedenen OS Shell-Scripts zu schreiben und zu verwenden.

Um übergebene Parameter auszuwerten, bedient man sich der dafür reservierten Variable $argv.

Beispiel 1: test_argv.php

<?php
var_dump($argv);
?>

Ausgabe von Beispiel 1:

d:\php5> php.exe test_argv.php IchBinParam1 UndIch2
array(3) {
  [0]=>
  string(13) "test_argv.php"
  [1]=>
  string(12) "IchBinParam1"
  [2]=>
  string(7) "UndIch2"
}

So weit, so gut. Wenn es jetzt darum geht, die Argumente zu parsen und zu prüfen, kann so ein Konstrukt rund um $argv schnell recht aufwändig werden. Um dies zu erleichtern, gibt es im PEAR-Paket eine kleine Klasse namens Console_Getopt.

Installation
Falls man PEAR verwendet, kann man die Klasse sehr einfach darüber installieren.

d:\php5> pear install Console_Getopt-1.3.0

Man ist jedoch nicht darauf angewiesen. Es reicht vollkommen aus, die Klasse von der offiziellen PEAR-Seite zu downloaden und in das Projekt einzubinden.

Anwendung
Die Anwendung ist denkbar einfach. Man bindet die Klasse in das eigene Programm ein, initialisiert das Klassenobjekt, definiert erlaubte Optionen und prüft dann die übergebenen Parameter.

Hier ein einfaches Beispiel zur Anwendung.

Beispiel 2: demo_getopt.php

<?php
// Klasse einbinden
include ("Getopt.php");

// Klasse initialisieren
$cg = new Console_Getopt();

/** 
 * Erlaubte Optionen:
 * -a Abba
 * -b Beatles
 * -q Queen
 */
$allowedOptions = "abq";

// Kommandozeile lesen
$args = $cg->readPHPArgv();

// Optionen herausfiltern
$ret = $cg->getopt($args, $allowedOptions);

// Errorhinweis
if (PEAR::isError($ret)) {
    die ("Fehler in Kommandozeile: " . $ret->getMessage() . "\n");
}

// Ausgabe der Optionen
print_r($ret);
?> 

Ausgabe zu Beispiel 2:

d:\temp\getopt>php.exe demo_getopt.php -ab Who Genesis
Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => a
                    [1] =>
                )

            [1] => Array
                (
                    [0] => b
                    [1] =>
                )

        )

    [1] => Array
        (
            [0] => Who
            [1] => Genesis
        )

)

d:\temp\getopt>d:\php5\php.exe demo_getopt.php -c
Error in command line: Console_Getopt: unrecognized option -- c

Nach dem Filtern der Optionen kann man nun die über die Kommandozeile eingebenen Parameter auswerten und weiter verarbeiten.

Beispiel 3: demo_getopt_erweitert.php

.
.
.
// Optionen herausfiltern
$ret = $cg->getopt($args, $allowedOptions);

$optionen = $ret[0];
if (sizeof($optionen) > 0) {
    // mindestens eine Option wurde gewählt
    foreach ($optionen as $o) {
        switch ($o[0]) {
            case 'a':
                echo "gewählte Band: Abba\n"; 
                break;
            case 'b':
                echo "gewählte Band: Beatles\n"; 
                break;
            case 'q':
                echo "gewählte Band: Queen\n"; 
                break;
        }
    }
} 

Die Klasse kann noch mehr, unter anderem ist es z.B. möglich, notwendige und optionale Parameter definieren. Auch kann man definieren, ob Parameter Zeichenketten oder Zahlenwerte sein dürfen.

Wer einen tieferen Einblick in die Klasse möchte, die Klasse selbst ist gut dokumentiert. Einen ausführlichen und guten Artikel mit weiteren Anwendungsbeispielen gibt es hier bei Zend.

2
Sep

Firefox: Ändern des Speicherortes für den Cache

categories Tutorials    

Der Firefox speichert den Cache per default unter den Userprofilen, also

%USERPROFILE%\Lokale Einstellungen\Anwendungsdaten\...

u.s.w.

Da sollten diese Dateien eigentlich auch mmer liegen, jedoch kann es Situationen geben, in welchen man diesen Speicherort ggf. ändern will (z.B. wenn das Userprofil in einem langsamen Netzwerk liegt u.ä.) – nicht nur als User, sondern auch als Administrator. Garantiert gibt es im WWW Tausende von Beschreibungen, wie man das macht… trotztem folgt hier der Weg, den ich bevorzuge. 😉

Wenn man diesen Speicherort nun anpassen möchte, kann man dies über die about:config des Browsers vornehmen. Zuerst muss man diese Einstellungsseite aufrufen, indem man about:config in die Adresszeile eintippt. Unter Umständen erscheint nun ein kleiner Sicherheitshinweis von den Entwicklern, den man natürlich akzeptieren muss, sofern man diese Art von Parameter wirklich wirklich wirklich verändern möchte.

In der nun folgenden Liste generiert man einen neuen Parameter, Datentyp String (z.B. via rechte Maustaste). Der Einstellungsname muss lauten:

browser.cache.disk.parent_directory

Den Wert sollte man sinnvollerweise mit dem gewünschten Pfadnamen füllen. Aufpassen, Slashes bitte doppeln!
c://temp//firefox_cache//

…fertig!

Update vom 30.01.2016

Der Artikel hat zwar nun schon einige Jahre auf dem Buckel… aufgrund eines Kommentars habe ich das Verhalten nochmal mit einer aktuellen Version des Firefoxx getestet, genauer gesagt der Version 44.0.

Ergebnis:
Diese Methode funktioniert nach wie vor.

26
Mai

Visualisierung von Sortieralgorithmen

categories Computer, Tutorials    

Das Basteln von Sortieralgorithmen ist in vielen Programmiersprachen ein beliebtes Betätigungsfeld.

Wie geht es?
Welcher Algorithmus ist schnell oder langsam?
Gibt es doch noch einen besseren Weg?

Was ich bisher nur selten gesehen habe, ist eine gute Visualisierung, um diese doch äußerst abstrakte Thematik ein wenig zu vereinfachen. Bis heute.

Angucken!

15
Okt

Betragsformatierung in SELECT-Statements

categories Computer, MySQL, SQL-Schnipsel, Tutorials    

Vielleicht stand der ein oder andere schonmal vor dem Problem, einen Betrag direkt aus einem SELECT-Statement heraus formatieren zu müssen, ohne das Ergebnis nachträglich mit einem anderen Hilfsmittel (z.B. mittels Programmcode, Reportgenerator o.ä.) zu „veredeln“.

Mir ging es jedenfalls heute so, daher folgt hier mein Lösungsweg.
(more…)

23
Sep

Upgrade von MySQL (Windows)

categories Computer, MySQL, Tutorials    

Aufgrund eines Tests der neuen MySQL-Funktion „Partitionierung“ erachtete ich es als notwendig, mal wieder meine kleine Testinstallation des MySQL-Community-Servers auf einen aktuellen Stand zu bringen. Derzeit aktuell ist 5.1.28, deklariert als Release Candidate, bis dato lief 5.0.67.

Da es sich nur um ein Testsystem handelt, war dieses Update natürlich unkritisch – für Produktionsumgebungen empfehle ich konventionellere Wege, wesentlich sorgfältigeres Vorbereiten und genaues Befolgen der von MySQL empfohlenen Installationsschritte.

1. Backup der bestehenden Installation + Daten
…läuft in meiner Testumgebung ohnehin nächtlich als Batch, somit prüfte ich nur, ob es lief bzw. wann zuletzt Änderungen an der Test-DB vorgenommen worden sind.

2. Download der Binaries
http://dev.mysql.com/downloads/mysql/5.1.html, ich entschied mich für die Windows-Variante „without installer“. Man bezieht damit ein gepacktes Archiv mit allen Binaries und Skripten.

3. Anhalten des Dienst
Da ich den MySQL-Server als Dienst laufen lasse, muss dieser vor dem Upgrade gestoppt werden. Wie? Entweder via Kommandozeile oder via GUI (Verwaltung / Dienste / Mysql – Dienst anhalten).

4. Binaries in die bestehende Installation kopieren
Ich entpackte das vorher gedownloadete Archiv direkt und gnadenlos in das Programmverzeichnis, unter welchem meine alte MySQL-Installation lief.

5. Dienst starten
Auch hier gilt: entweder via Kommandozeile oder via GUI (Verwaltung / Dienste / Mysql – Dienst starten). Und siehe da, der Server läuft wieder.

6. Update-Programm von MySQL ausführen
…am besten via Kommandozeile:

mysql-upgrade.exe

(versteckt sich im /bin-Verzeichnis).
Dieses Tool startet mehrere MySQL-Kontrollskripts und -Programme, welche die bestehenden Datenbanken auf Inkompabilitäten prüft und ggf. repariert. Auch werden die Privilegien entsprechend angepasst.

Fertig!

Am längsten dauerte der Download, es handelt sich um insgesamt etwa 90 MB. Insgesamt hatte ich die Installation innerhalb von fünf Minuten aktualisiert. Und jetzt bin ich gespannt, was das Partitionieren hergibt! 😉

← Previous PageNext Page →