PHP App Store
Kommentare

How-to: Komponenten des PHP App Stores
Um die vorher aufgezeigten Ziele eines PHP App Stores erreichen zu können, muss man sich zunächst mit den technischen Anforderungen der Applikationen beschäftigen.

How-to: Komponenten des PHP App Stores

Um die vorher aufgezeigten Ziele eines PHP App Stores erreichen zu können, muss man sich zunächst mit den technischen Anforderungen der Applikationen beschäftigen. Des Weiteren ist auch eine eingehende Auseinandersetzung mit den zu erwartenden Problemen und möglichen Lösungen zur optimalen Prozessunterstützung notwendig. Abhängig von der jeweiligen Ausgangssituation können auch nur bestimmte Teilkomponenten des App Stores realisiert werden. Als Ausgangsbasis nehmen wir an, dass ein Subversion Repository (SVN) in der Entwicklung verwendet wird, um Änderungen im Code verwalten zu können und ein öffentlicher Server für die Kommunikation mit den Kundensystemen zur Verfügung steht. Des Weiteren gehen wir davon aus, dass ein PHP-Framework (z. B. ZEND Framework, Symfony) als Basis für die Anwendungen verwendet wird, denn ohne eine minimale gemeinsame Basis ist der Nutzen des App Stores wesentlich geringer (die Codebeispiele und Tabellen zur Veranschaulichung wurden folglich auf das Wesentlichste reduziert).

Packaging, Lizenzverwaltung und Encoding

Ist die Anwendung von der Entwicklungsabteilung fertiggestellt, müssen die einzelnen Skripte, Datenbankinformationen und statische Dateien (z. B. CSS, JS und Grafiken) in sinnvolle Pakete aufgeteilt werden. Die Pakete sollten für Entwickler und Endanwender gleichermaßen begreifbar sein, d. h. es werden Funktionspakete geschnürt, die entweder komplette Anwendungen oder Module mit einer klaren Funktion beinhalten. Jedes Paket sollte mit Metainformationen versehen und für spätere Updates einfach aktualisierbar sein. Im ersten Schritt wird eine Tabelle erstellt, in der die Pakete definiert werden (Listing 1)

Listing 1: Paketdefinition basierend auf SVN-Pfaden
CREATE TABLE 'svn_package' (
  'id' int(10) unsigned NOT NULL auto_increment,
  'title' varchar(100) default NULL,
  'description' text,
  'svn_path' text,
  PRIMARY KEY  ('id')
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='SVN Pakete'

In einer zweiten Tabelle werden SVN Revision, Paketversion und Releasetyp festgehalten. Zusätzliche Metainformationen wie ein kundentaugliches Changelog kann hier ebenfalls untergebracht werden (Listing 2).

Listing 2: SVN Revision und Paket
CREATE TABLE 'svn_package_revision' (
  'id' int(10) unsigned NOT NULL auto_increment,
  'svn_package_id' int(10) unsigned NOT NULL,
  'package_version' int(10) unsigned NOT NULL,
  'svn_revision' int(10) unsigned NOT NULL,
  'changelog' text,
  'release_type' enum('stable','beta','dev') default 'dev',
  'package_status' enum('scheduled','in_progress','compiled') default 'scheduled',
  PRIMARY KEY ('id')
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='SVN Paket-Revisionen'

Je nach Anwendungsfall und Bedarf sind in den hier genannten Tabellen weitere Informationen wie Preis, Lizenzinformationen, Werbematerial oder Paketabhängigkeiten realisierbar. Diese können dann für die Nutzeransicht zu einem späteren Zeitpunkt weiter verwendet werden. Mithilfe dieser Paketinformationen, den Standard-Subversion-Kommandos und ein paar Zeilen PHP lässt sich das Packaging nun komplett automatisieren (z. B. in einem Cronjob, siehe Beispielcode). An dieser Stelle lässt sich auch hervorragend ein Code-Compiler bspw. der ZendGuard [2] integrieren, um den Paketcode oder auch nur Teile eines Pakets vor vertragswidrigem Zugriff zu schützen. Mit dem Einsatz von PHP-Encodern sind auch der Lizenzintegration wenig Grenzen gesetzt. So kann dafür gesorgt werden, dass ein Paket nach einer gewissen Laufzeit nicht mehr ausführbar ist, zudem können mit dem Lizenzmanager weitere Restriktionen integriert werden (Listing 3).

Listing 3: Pakete erzeugen via PHP-Skript
0){
 $package = mysql_fetch_assoc($result);
   $targetfile = "{$package['package_id']}-{ $package['svn_revision']}.tar.gz";
 $cmd = "svn export -r {$package['svn_revision']} {$package['svn_path']} {$tmpfolder} --force";
 shell_exec($cmd);
 // at this point you could trigger a zend guard encoder
   // simple example: shell_exec("/path/to/zend/zendenc5 --include-ext php --recursive --expires {$expiry} {$tmpfolder}");
// Check all options in the ZendGuard Manual
$cmd = "tar cvfz {$targetfolder}{$targetfile } -C {$tmpfolder} .";
shell_exec($cmd);
}
?>

Als Ergebnis findet man Pakete, die direkt aus der Entwicklungsumgebung erzeugt wurden. Durch Zusatzinformationen in den zuvor genannten Tabellen können auch kundenspezifische Pakete im gleichen System verwendet werden. Hierfür muss einfach das Codebeispiel um Kunden oder Lizenzattribute erweitert und bei Anfragen im App Store nach dem Lizenzschlüssel gefiltert werden, um die individuell verfügbaren Module anzuzeigen.


Themen der folgenden Seiten:

  • Qualitätssicherung
  • Vermarktung, Vertrieb und Integration
  • xelos.connect App Store
  • Installation und Update
  • Verzeichnisrechte und Systemsicherheit
  • PHP App Store: Eine Investition, die sich lohnt
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -