2008-11-12 17 views
7

Ich schrieb eine kleine PHP-Anwendung, die ich gerne verteilen würde. Ich suche nach Best Practices, so dass es mit minimalem Aufwand auf den meisten Webhosts installiert werden kann.Verteilen einer kleinen PHP-Anwendung

Kurz: Es ist ein einfaches Tool, mit dem Benutzer Dateien herunterladen können, sobald sie sich mit einem Passwort anmelden.

Also meine Fragen sind:

1) Wie sollte ich Konfigurationswerte behandeln? Ich verwende keine Datenbank, daher scheint eine Konfigurationsdatei angemessen zu sein. Ich weiß, dass andere php apps (z. B. Wordpress) verwenden definiert, aber sie sind global und es gibt Potenzial, dass die Namen in Konflikt geraten. (Globale Variablen haben natürlich auch das selbe Problem.) Ich habe mir den "ini" -Dateimechanismus angeschaut, der in PHP eingebaut ist. Es erlaubt nur Kommentare an der Spitze - so können Sie nicht einfach jede Einstellung kommentieren - und Sie können die Syntax nicht mit "php -f" validieren. Andere Optionen?

2) Umgang mit Templating? Die Anwendung muss ein Formular auspumpen. Möglicherweise mit einer Fehlermeldung. (z. B. "Tut mir leid, falsches Passwort.") Ich habe eine Klassenvariable mit dem HTML-Formular, kann aber auch eine externe Vorlagendatei verwenden (in der Konfiguration angegeben). Ich mache ein triviales Suchen und Ersetzen - z. % SCRIPT% auf den Namen des Skripts,% STATUS% auf die Fehlermeldung. Das fühlt sich ein wenig an, als würde man das Rad neu erfinden, aber ein Templating-System wie Smarty ist Overkill. (Möglicherweise haben sie bereits ein Vorlagensystem.) Andere Optionen?

3) i18n - Es gibt nur 3 Nachrichtenzeichenfolgen, und Gettext scheint nicht universell installiert zu sein. Ist es so eine schlechte Idee, nur diese drei Strings in der Konfigurationsdatei zu definieren?

4) Wie integriere ich mich am besten mit anderen Frameworks? Meine App ist eine einzelne Klasse. Also dachte ich, ich könnte einfach ein PHP-Skript einfügen, das zeigt, wie die Klasse aufgerufen wurde. Es wäre ein Startpunkt für Leute, die es in einen anderen Rahmen integrieren mussten, aber auch für diejenigen, die kein Interesse am Customizing haben. Angemessen?

5) GET/POST-Parameter - Ist es eine schlechte Form für eine Klasse, $ _GET und $ _POST zu betrachten? Sollen alle Werte während des Baus in meine Klasse weitergegeben werden?

Danke.

Antwort

7

Konfiguration

Sie können eine PHP-Datei wie folgt verwenden:

<?php 
return array(
    'option1' =&gt; 'foobar', 
    'option2' =&gt; 123, 
    //and so on... 
); 
?> 

Und in der Hauptklasse benutzen Sie einfach:

$config = (array) include 'path/to/config/file'; 

Und wenn Sie Ihre Klasse meist verteilen eine Komponente in anderen Anwendungen, setzen Sie einfach config array/object als Parameter in den Konstruktor Ihrer Klasse und belassen Sie die Details dem Benutzer.

Templating

Für solche einfache Anwendung Ihr das beschriebene Verfahren sollte ausreichen. Denken Sie daran, dass Sie Ihre Klasse immer erweitern und Ihre Ausgabemethode überladen können.

I10N

Wie bereits erwähnt, für drei Variablen etwas mehr als sie zu speichern als Config nur übertrieben.

Integration

Kommentar jede öffentliche Methode (oder noch besser auch als auch private geschützt) mit Erklärungen, was tun sie tun und welche Parameter benötigt werden. Wenn Sie das mit einem Beispiel kombinieren, sollte es für die meisten Benutzer ausreichen.

GET vs POST

Ihre Klasse verwendet, Passwörter und Sie denken, auch von ihnen über GET schicken? ;) Denken Sie an Browser-Verlauf, Referer Header usw. - die Passwörter Ihrer Benutzer wären dort sichtbar.

+0

Ich liebe diese Konfiguration Stil! Ich werde es jetzt ausprobieren. –

2
  1. Kann config lokal für Klasseninstanzen sein? Oder könnten Sie eine kleine Klasse erstellen, mit der Sie eine Instanz für die Abfrage von Konfigurationswerten erstellen können? Das Voranstellen aller globalen Variablen mit dem Namen Ihrer Anwendung sollte dazu beitragen, Konflikte zu verhindern.

  2. Wenn Ihre Vorlagen wirklich einfach sind, schreiben Sie einfach einen kurzen Templater. Es wird einfacher sein als zu versuchen, Probleme abzuwehren, die Leute mit einem Templater eines Drittanbieters bekommen. Es könnte auch Lizenzprobleme vereinfachen. Wenn Sie sich Sorgen machen, was sie bereits haben, werden Sie niemals etwas veröffentlichen. Es gibt zu viele Kombinationen.

  3. Für 3 Saiten? Ja, mach das genauso wie du config behandelst.

  4. Gute Kommentare durchgängig mit einem Intro, das erklärt, wie Sie die Klasse verwenden.

  5. Ich glaube nicht. Wenn es Sie stört, können Sie Standardargumente verwenden, um gegebenen Argumente zu verwenden zuerst, dann für GET/POST-Werte suchen, wenn keine angegeben sind (obwohl das könnte ein Sicherheitsrisiko sein)

Es gibt andere Dinge zu tragen Berücksichtigung.Viele Leute sind auf gemeinsamen Hosts und haben daher keine Kontrolle über ihre php.ini oder ihre PHP-Version. Sie müssen sicherstellen, dass Sie nur Funktionen verwenden, die so allgemein wie möglich sind.

Ein Beispiel dafür ist, dass Short nicht auf einigen Hosts aktiviert sind (Sie haben <?php ... ?> und <?php echo "..."?> verwenden anstelle von <? ... ?> oder <?= "..." ?>), die eine königliche PITA sein kann.

2

Neben Krzysztof guten Rat:

  • Verwenden <?php nur
  • Wenn Sie Funktionen verwenden, die, function_exists() verwenden deaktiviert werden können, sie sind zur Verfügung zu gewährleisten. @missing_function() lässt PHP stillschweigend ohne Fehler protokollieren.
  • Sie können sich nicht auf Dinge verlassen, die über php.ini deaktiviert/geändert werden können. Verwenden Sie ini_get(), um sich an verschiedene Einstellungen anzupassen.
  • Wenn magic_quotes aktiviert sind, streichen Sie die Schrägstriche nur von Ihrer Kopie der Eingabe ab - ändern Sie keine globalen Arrays! Die Sicherheit eines lahmen Codes kann darauf beruhen, dass diese Schrägstriche vorhanden sind.
  • Erwarten Sie, dass Benutzer & einfügen Code aus Ihrer Dokumentation/Website sinnlos kopieren.
+0

"Verwenden Sie " Weg, es wird nicht benötigt, wenn es die letzten Zeichen einer Datei wären. –

+0

Ich bekomme, dass kurze Tags Probleme verursachen können - meine PHP-Dateien sind alle PHP, das ist also keine große Sache. Aber was macht das Auslassen des '?>' Kauf mich? (Geringeres Risiko, unbeabsichtigte zusätzliche Leerzeichen hinzuzufügen?) –

+0

Sie riskieren nicht, Leerraum am Ende der Datei auszugeben - was schlecht sein kann, wenn Sie HTTP-Header später in den Anwendungen senden möchten, z. B. Sitzung starten. Natürlich können Sie dieses Problem mit der Pufferung der Ausgabe umgehen. –

Verwandte Themen