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.

23
Feb

Unicode 6.0.0

categories Computer, Fundstücke    

Soeben wurde die Unicode-Version 6.0.0 publiziert. Eigentlich ist es ja ein internationaler Standard, in dem „langfristig für jedes sinntragende Schriftzeichen oder Textelement aller bekannten Schriftkulturen und Zeichensysteme ein digitaler Code festgelegt“ werden sollte, aber mittlerweile ist doch ein ganzer Berg Mist in der Sammlung gelandet – wie das folgende Bild beweisen sollte…!

Unicode 1F4A9

Unicode 1F4A9

Das Einbetten aller verschiedenen Schriftzeichen verstehe ich ja, aber wieso Symbole? Und wo zieht Unicode die Grenze?

18
Jan

HTML5-Logo

categories Aktuelles, Computer    

HTML5 ist in aller Munde. Und jetzt gibt es auch ein offizielles Logo.


HTML5 Powered with Connectivity / Realtime, CSS3 / Styling, Device Access, Graphics, 3D & Effects, Multimedia, Performance & Integration, Semantics, and Offline & Storage

17
Dez

Weihnachtsbaum

categories Computer, out of the ordinary    

Der vierte Advent steht vor der Tür, Zeit für einen angemessenen Weihnachtsbaum!

                  \o/
                  -+-
                1x8+1=9
               12x8+2=98
              123x8+3=987
             1234x8+4=9876
            12345x8+5=98765
           123456x8+6=987654
          1234567x8+7=9876543
         12345678x8+8=98765432
        123456789x8+9=987654321
             1 x 9 + 2 = 11
            12 x 9 + 3 = 111
           123 x 9 + 4 = 1111
          1234 x 9 + 5 = 11111
         12345 x 9 + 6 = 111111
        123456 x 9 + 7 = 1111111
       1234567 x 9 + 8 = 11111111
      12345678 x 9 + 9 = 111111111
     123456789 x 9 +10 = 1111111111
                1 x 1 = 1
              11 x 11 = 121 
            111 x 111 = 12321
          1111 x 1111 = 1234321
        11111 x 11111 = 123454321
      111111 x 111111 = 12345654321
    1111111 x 1111111 = 1234567654321
  11111111 x 11111111 = 123456787654321
111111111 x 111111111 = 12345678987654321

3
Dez

Wenn der Rechner nicht bootet…

categories Computer, Fundstücke    

…geht man in die Fehleranalyse.

Wie man das macht, kann man sich hier ansehen:
http://i.imgur.com/JvcBb.png

← Previous PageNext Page →