2008-11-12 17 views
7

J'ai écrit une petite application PHP que j'aimerais distribuer. Je suis à la recherche de bonnes pratiques pour pouvoir l'installer sur la plupart des hébergeurs avec un minimum de tracas.Distribution d'une petite application PHP

En résumé: C'est un outil simple qui permet aux utilisateurs de télécharger des fichiers une fois qu'ils se sont connectés avec un mot de passe.

Mes questions sont les suivantes:

1) Comment dois-je gérer les valeurs de configuration? Je n'utilise pas de base de données, donc un fichier de configuration semble approprié. Je sais que d'autres applications php (par exemple Wordpress) utilisent des définitions, mais elles sont globales et il existe un risque de conflit entre les noms. (Les variables globales ont aussi le même problème, évidemment.) J'ai regardé le mécanisme de fichier "ini" construit en PHP. Il ne permet que les commentaires en haut - vous ne pouvez donc pas annoter facilement chaque paramètre - et vous ne pouvez pas valider la syntaxe avec "php -f". Autres options?

2) Comment gérer les modèles? L'application doit pomper un formulaire. Peut-être avec un message d'erreur. (par exemple "Désolé, mauvais mot de passe".) J'ai une variable de classe avec le formulaire HTML, mais j'autorise également l'utilisation d'un fichier de gabarit externe (spécifié dans la configuration). Je fais une recherche triviale et remplace - par exemple. % SCRIPT% au nom du script,% STATUS% pour contenir le message d'erreur. Cela ressemble un peu à réinventer la roue, mais inclure un système de template comme Smarty est exagéré. (De plus, ils peuvent déjà avoir un système de modèle.) Autres options? 3) i18n - Il n'y a que 3 chaînes de message, et gettext ne semble pas être installé universellement. Est-ce une si mauvaise idée de faire ces trois paramètres de chaînes dans le fichier de configuration?

4) Comment s'intégrer au mieux avec d'autres frameworks? Mon application est une classe unique. Donc, j'ai pensé que je pourrais juste inclure un script PHP qui a montré comment la classe a été appelée. Ce serait un point de départ pour les personnes qui ont dû l'intégrer dans un autre cadre, mais aussi bien pour ceux qui ne sont pas intéressés par la personnalisation. Raisonnable?

5) Paramètres GET/POST - Est-ce une mauvaise forme pour une classe de regarder $ _GET et $ _POST? Est-ce que toutes les valeurs doivent être passées dans ma classe pendant la construction?

Merci.

Répondre

7

Configuration

Vous pouvez utiliser un fichier php comme ceci:

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

Et dans la classe principale il suffit d'utiliser:

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

Et si vous prévoyez de distribuer la plupart du temps votre classe un composant dans d'autres applications, puis mettez simplement config array/object en paramètre dans le constructeur de votre classe et laissez les détails à l'utilisateur.

Templating

Pour cette application simple de la méthode décrite votre devrait être suffisant. Rappelez-vous que vous pouvez toujours étendre votre classe et surcharger votre méthode de sortie avec la sienne.

I10N

Comme mentionné précédemment, pour quoi que ce soit 3 variables plus les stocker sous forme config est juste surpuissant.

Intégration

Commentaire chaque méthode publique (ou mieux encore aussi protégés et privés) avec des explications que font-ils et quels sont les paramètres nécessaires. Si vous combinez cela avec un exemple, cela devrait suffire pour la plupart des utilisateurs.

GET vs POST

Votre classe utilise des mots de passe et vous pensez même de les envoyer par GET? ;) Pensez à l'historique du navigateur, aux en-têtes de référence, etc. - les mots de passe de vos utilisateurs y seraient visibles.

+0

J'adore ce style de configuration! Je vais l'essayer maintenant. –

2
  1. La configuration peut-elle être locale aux instances de classe? Ou pourriez-vous créer une petite classe que vous pourriez créer une instance de pour interroger les valeurs de configuration? De plus, l'ajout de vars globaux avec le nom de votre application devrait permettre d'arrêter les conflits.

  2. Si votre modèle est vraiment simple, écrivez simplement un court modèle. Ce sera plus facile que d'essayer de repousser les problèmes que les gens rencontrent avec un tiers. Cela pourrait également simplifier les problèmes de licence. Si vous commencez à vous inquiéter de ce qu'ils ont déjà, vous ne libérerez jamais rien. Il y a trop de combinaisons.

  3. Pour 3 chaînes? Ouais faites-les de la même façon que vous manipulez la configuration. Bons commentaires tout au long avec une intro expliquant comment vous utilisez la classe

  4. Je ne pense pas. Si cela vous dérange, vous pouvez utiliser des arguments par défaut d'utiliser des arguments donnés en premier lieu, puis rechercher des valeurs GET/POST si aucun sont fournis (si cela pourrait être un risque de sécurité)

Il y a d'autres choses à prendre en considération.Beaucoup de personnes sont sur des hôtes partagés et par conséquent, n'ont pas de contrôle sur leur php.ini ou leur version php. Vous devez vous assurer que vous utilisez uniquement des fonctionnalités aussi courantes que possible.

Un exemple est que shorttags ne sont pas activés sur certains hôtes (vous devez utiliser <?php ... ?> et <?php echo "..."?> au lieu de <? ... ?> ou <?= "..." ?>) qui peut être un PITA royal.

2

En plus de bons conseils de Krzysztof:

  • Utilisez uniquement <?php
  • Si vous utilisez des fonctions qui peuvent être désactivées, utilisez function_exists() pour assurer qu'ils sont disponibles. @missing_function() fait mourir PHP sans aucune erreur. Vous ne pouvez pas compter sur les éléments pouvant être désactivés/modifiés via php.ini. Utilisez ini_get() pour adapter à différents paramètres.
  • Si magic_quotes sont activés, supprimez uniquement les barres obliques de votre copie d'entrée - ne modifiez pas les matrices globales! La sécurité d'un code boiteux peut dépendre de la présence de ces barres obliques.
  • Attendez-vous à ce que les utilisateurs copient aveuglément & coller le code de votre documentation/site Web.
+0

"Utiliser ", Ce n'est pas nécessaire si ce sont les derniers caractères d'un fichier. –

+0

Je comprends que les balises courtes peuvent causer des problèmes - mes fichiers PHP sont tous en PHP, donc ce n'est pas grave. Mais qu'est-ce que l'omission du '?>' M'achète? (Moins de risque d'ajouter des espaces supplémentaires involontaires?) –

+0

Vous ne risquez pas de sortir des espaces blancs à la fin du fichier - ce qui peut être mauvais si vous souhaitez envoyer des en-têtes http plus tard dans les applications, par exemple démarrer la session. Bien sûr, vous pouvez contourner ce problème avec la mise en mémoire tampon de sortie. –