Artikelformat

PEAR Package selbst gemacht

Ich bin ja nur bedingt ein Freund von PEAR. Aber Tools wie PHP_CodeSniffer findet man auch dort und daher hat es für mich einen positiven Aspekt. Nun verbinde ich 2 Probleme und am Ende dieses Beitrags haben wir eine einfache Lösung, die beides löst und dabei noch richtig cool ist. Der CodeSniffer hat einige Standards. Nun möchte ich einen eigenen Standard definieren, der vom PEAR Coding Standard abgeleitet ist. Ich nenne diesen PEARMOD (PEAR modified oder PEAR Modification). Dieser Standard wird den PEAR Standard in der Form ändern, dass man die öffnende Klammer bei Klassen und Funktionsdefinitionen nicht in eine neue Zeile schreibt, sondern in die gleiche Zeile, in der auch die Signatur steht. Wo die öffnende Klammer steht ist ein großer Streitpunkt und ich gehöre zu der Fraktion, die eben keine Zeile für dieses Zeichen verschwenden will. Zusammengehörigkeiten kann eine vernünftige IDE auch darstellen und somit finde ich Signatur und geschweifte Klammer in einer Zeile berechtigt. Der PEAR Coding Standard sieht das natürlich anders und somit muss ich mit einem eigenen Standard leben. Mein Code wird nicht unter pear.php.net auftauchen, also ist meine Modifikation okay.

Zuerst definiere ich also meinen eigenen Standard und da ich das zweite Problem gleich mitlöse, erstelle ich mir gleich eine Verzeichnisstruktur in meinem Workspace. Diese lautet so:

1
~/PHP/CodeSniffer/Standards/PEARMOD

Im PEARMOD Verzeichnis lege ich nun die Datei PEARMODCodingStandard.php an und der Inhalt lautet so:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
 
if (class_exists('PHP_CodeSniffer_Standards_CodingStandard', true) === false) {
    throw new PHP_CodeSniffer_Exception('Class PHP_CodeSniffer_Standards_CodingStandard not found');
}
 
class PHP_CodeSniffer_Standards_PEARMOD_PEARMODCodingStandard extends PHP_CodeSniffer_Standards_CodingStandard {
    public function getIncludedSniffs() {
        return array(
                'PEAR',
                'Generic/Sniffs/Functions/OpeningFunctionBraceKernighanRitchieSniff.php'
        );
 
    }//end getIncludedSniffs()
 
    public function getExcludedSniffs() {
        return array(
                'Generic/Sniffs/Functions/OpeningFunctionBraceBsdAllmanSniff.php',
                'PEAR/Sniffs/Functions/FunctionDeclarationSniff.php',
                'PEAR/Sniffs/Classes/ClassDeclarationSniff.php'
        );
    }
 
}//end class
?>

PEAR überprüft in der FunctionDeclaration und ClassDeclaration ein zweites Mal, wo die öffnende Klammer steht. Ich habe den Sinn nicht weiter verfolgt und vielleicht würde sich hier ein Patch anbieten, denn diese Kontrolle liegt bereits an einer anderen Stelle vor. Nun wechselt man wieder in das PHP Verzeichnis und legt hier eine package.xml an. Diese Datei – mit den richtigen Daten gefüllt – erlaubt es nun ein PEAR-Package zu erstellen, dass man aus dem Filesystem heraus installieren kann. Somit kann ich meinen Standard in verschiedenen Version nutzen, ein Changelog pflegen und Kollegen zur Verfügung stellen.

Die Erstellung der package.xml ist auf den ersten Blick nicht ganz einfach aber es gibt hier Hilfe aus dem PEAR-Repository. Man installiert sich einfach einen PackageFileManager_CLI.

1
pear install PEAR_PackageFileManager_Cli-alpha

Nun hat man das Commandline-Tool pfm zur Verfügung. Dieses startet man im PHP Ordner und folgt dem Wizard. Als Basisverzeichnis muss man PHP angeben und der Rest ist relativ selbsterklärend. Nach dem Speichern erhält man die korrekte package.xml. Mit dieser kann man sich ein Installationspaket schnüren lassen mit dem einfachen Aufruf:

1
pear package

Abhängig von den angegebenen Daten erhält man eine entsprechende tgz-Datei. In meinem Fall heißt diese PEARMOD-0.0.1.tgz. Der neugebaute Standard lässt sich nun mit pear install PEARMOD-0.0.1.tgz installieren. Als Ausgabe erhält man die Meldung:

1
install ok: channel://__uri/PEARMOD-0.0.1

Also weiß man, dass der channel __uri heißt, falls man einmal das Paket deinstallieren will. Zu beachten ist hier, dass die Installation root-Rechte erfordert, weil das lokale PEAR-Verzeichnis zumeist vom normalen Nutzer nur lesbar zu erreichen ist, wenn man nicht trickst.

Interessant wäre die Nutzung eines pear-Servers, wie zum Beispiel Pirum. Insbesondere im Firmenumfeld kann man so das Deployment vereinfachen.

Um nun noch zu testen, ob unser neuer Standard verfügbar ist, kann man einfach phpcs -i aufrufen und sollte in der Liste PEARMOD finden.

Der Quellcode und die package.xml ist natürlich im SVN-zu finden.

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.