Andreas Korthaus: Modulares Programmieren mit PHP

Beitrag lesen

Hallo!

So langsam bin ich an der konkreten Umsetzung, dieses Jahr mal Programmieren statt Weihnachten ;-)

*kleiner Scherz!*

Jedenfalls schwirren mir wieder 2 Problematiken im Kopf herum.
Thema 1: Datenbank-Zugriff.
Ich habe mich für PEAR enstchieden, das ja auch wunderbar portablen Code ermöglicht, aber eigentlich mehr auch nicht, die SQL-Statements stehen immer noch verstreut in allen Scripten. Jetzt frage ich mich ob sich das lohnt, die SQL-Abfragen über eine Klasse zu machen, also ich hatte das mal für einen Warenkorb so gemacht, so hatte ich kein SQL mehr im eigentlichen Code, sondern nur noch dineg wie  $warenkorb -> getGesamtpreis(), $warenkorb -> getMwSt(), und in der Methode stand dann die entsprechende SQL-Abfrage. Die Frage die ich mir jetzt stelle - lohnt sich das? Was hätte ich für einen Vorteil? Wenn sich was ändert könnte ich das in der Klasse machen und müßte nicht in den Code, aber ändern müßte ich vermutlich auch nicht mehr wenn ich das ohne extra Klasse mache.

2. Problem, wie soll die Verzeichnisstruktur aussehen?
Bisher habe ich im Prinzip immer sowas gehabt:

/home/www/daten/
/home/www/webseite/
/home/www/webseite/images/

DOC-ROOT des Apachen wäre hier "/home/www/webseite/" , da lag dann die index.php drin, udn der Rest drum, herum, Script die ich nicht per HTTP brauchte, also reine include-Dateien habe ich in "/home/www/daten/" für HTTP unerreichbar gespeichert. So, jetzt habe ich ein bisschen überlegt, und die ganze Zeit im Hinterkopf, dass ich ja Plugins in mein Programm einbinden können will, oder auch weglassen kann. Wirklich gut gelöst ist das IMHO bei moregroupware(.org):
(Das Modul "contact" als Beispiel)
<img src="http://moregroupware.sourceforge.net/docs/moduletree.gif" border="0" alt="">
MGW hat halt seien Standardbibliothek die überall eingebunden werden kann. Wenn das Modul jetzt mehr braucht gibt es in einem Unterverzeichnes den Ordner inc. genau so wíe media für spezielle Bilder, und natürlich Templates und LANG-Files. Die Struktur finde ich schon gar nicht schlecht.
Aber erstmal die Frage, was ist mit den Rechten? Ich will ja nicht das alle Leute sich meine inc... Files angucken können. OK, die kann per .htaccess durch PHP schicken oder besser direkt .inc.php nennen nur sind die dann nicht mehr unerreichbar, wie ich das bisher immer hatte. Was könnte man machen? OK, eine .htaccess mit einem Zugangsschutz und ungültigem Passwort und die Rechte für die Scripte auf 600. Was könnte mir hier jetzt noch passieren?
Ich will die Dateien eines Plugins lieber nicht über das gesamte Dateisystem verteilen, daher finde ich das sehr gut wenn die Dateien so zusammenliegen, um ein Plugin einfach hinzufügen und entfernen zu können.
Was mich noch große Probleme bereitet ist dei Trennung von "Modul" und "Plugin". Wenn ich mal so überlege zum upload-Modul. Da hatten wir ein Backend-Modul und ein Frontend-Modul, aber wie brauche ich das in der Praxis? Eigentlich ist der Upload-Dialog z.B. einfach in einen Lieferantenfragebogen eingebettet. Der Lieferantenfragebogen-Generator war ja ein komplettes Plugin, halt eine Erweiterung des Basisprogramms, die nicht immer vorhanden ist. Dieses Plugin besteht dann aus verschiedenen Template und LANG-Files, aus verschiedenen Scripten, oder besser aus einem Script mit mehreren conditionalen includes, eben unter anderem mit dem Upload Front- und Backend. Die Frage ist ob das hier eigenständige Module sein sollten, oder ob diese mit den anderen Formularfeldern nicht besser ein komplettes Lieferantenfragebogen-Frontend und - Backend eingebettet werden.
Auch fraglich ist, wenn ich Upload - Felder in mehrern Formularen verwende, sollte ich dann lieber doch reine Upload-Frontend und -Backend draus machen, die sich halt auch in Formulare einbetten lassen, und die dann global allen Formularen zu Verfügung stehen?
Dann würde ich vielleicht ein extra Verzeichnis "includes/modules/" machen, in das ich nur solche Module wie das upload Front- und Backend packe, dann brauche ich am besten hier noch ein Unterverzeichnis für die einzelnden Templates und LANG-Files...

Die Plugins kommen dann in das Verzeicnis Plugins mit einer ähnlichen Struktur wie bei mgw.

Dann würde ich mir jetzt so eine Struktur vorstellen:
DOC-ROOT: /home/www/
/home/www/media/ (Bilder...)
/home/www/includes/(Module, Smarty, Config-Files...)
/home/www/plugins/ (Erweiterungen)
/home/www/.htaccess (mit rewrite-rule auf index.php)
/home/www/index.php (Basismodul, läd alles notwendige und leitet den Request weiter)
/home/www/styles.css
/home/www/...

So hatte ich mir das bisher vorgestellt. Nur in dieser Konstellation ist z.B. mein DB-Passort nicht sicher, oder ist das doch hinreichend sicher durch HTTP DIGEST AUTHENTIFICATION(require nicht vorhandenen User) und Datei-Rechte(PHP/zu parsende Flat-Files) auf 600 und Verzeichnisse auf 710.

Naja irgendwie habe ich da ein ungutes Gefühl. Was sagt Ihr dazu?

Viele Grüße
Andreas