2008-11-12 13 views
7

Napisałem małą aplikację PHP, którą chciałbym rozpowszechniać. Szukam najlepszych praktyk, dzięki czemu można je zainstalować na większości hostów internetowych przy minimalnym wysiłku.Dystrybucja małej aplikacji PHP

Krótko: To proste narzędzie, które pozwala użytkownikom pobierać pliki po zalogowaniu się przy użyciu hasła.

Więc moje pytania to:

1) W jaki sposób należy obsługiwać wartości konfiguracji? Nie używam bazy danych, więc plik konfiguracyjny wydaje się odpowiedni. Wiem, że inne aplikacje php (np. Wordpress) definiują, ale są globalne i istnieje możliwość, że nazwy będą w konflikcie. (Zmienne globalne mają oczywiście ten sam problem.) Spojrzałem na mechanizm plików "ini" wbudowany w PHP. Dopuszcza tylko komentarze u góry - nie możesz więc łatwo dodawać adnotacji do każdego ustawienia - i nie możesz sprawdzić poprawności składni za pomocą "php -f". Inne opcje?

2) Jak radzić sobie z szablonami? Aplikacja musi wypompować formularz. Prawdopodobnie z komunikatem o błędzie. (np. "Przepraszam, błędne hasło.") Mam zmienną klasy z formularzem HTML, ale także zezwalam na użycie zewnętrznego pliku szablonu (określonego w konfiguracji). Wykonuję trochę trywialnego wyszukiwania i zamiany - np. % SCRIPT% na nazwę skryptu,% STATUS%, aby zatrzymać komunikat o błędzie. To trochę przypomina ponowne wymyślenie koła, ale w tym szablonie takim jak Smarty jest przesada. (Plus mogą już mieć system szablonów.) Inne opcje?

3) i18n - Istnieją tylko 3 ciągi komunikatów, a gettext nie wydaje się być powszechnie zainstalowany. Czy jest to taki zły pomysł, aby wprowadzić te trzy parametry łańcuchów w pliku konfiguracyjnym?

4) Jak najlepiej zintegrować z innymi frameworkami? Moja aplikacja jest jedną klasą. Pomyślałem więc, że mogę dołączyć skrypt php, który pokazuje, w jaki sposób została nazwana klasa. Byłby to punkt wyjścia dla osób, które musiałyby zintegrować go z inną strukturą, ale także dobrze dla osób nie zainteresowanych dostosowywaniem. Rozsądny?

5) Parametry GET/POST - czy jest to zła forma dla klasy, która patrzy na $ _GET i $ _POST? Czy wszystkie wartości powinny zostać przekazane do mojej klasy podczas budowy?

Dzięki.

Odpowiedz

7

Konfiguracja

Można użyć pliku php tak:

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

A w głównej klasie wystarczy użyć:

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

A jeśli planują głównie rozpowszechniać swoją klasę jako komponent w innych aplikacjach, a następnie po prostu umieść tablicę konfiguracyjną/obiekt jako parametr w konstruktorze klasy i pozostaw szczegóły użytkownikowi.

Templowanie

Do tak prostego zastosowania wystarczy opisana metoda. Pamiętaj, że zawsze możesz rozszerzyć swoją klasę i przeładować swoją własną metodę wyprowadzania.

I10N

Jak wspomniano wcześniej, dla 3 zmiennych coś więcej niż przechowywanie ich jako config jest po prostu przesada.

Integracja

Komentarz każda metoda publicznego (albo jeszcze lepiej chronione i również te prywatne) z objaśnieniami co robią i jakie parametry są potrzebne. Jeśli połączysz to z przykładem, powinno wystarczyć dla większości użytkowników.

GET vs POST

Twoja klasa używa haseł, a nawet myśleć wysyłać je za pośrednictwem GET? ;) Pomyśl o historii przeglądarki, nagłówkach refererowych itp. - hasła użytkowników będą tam widoczne.

+0

Uwielbiam ten styl konfiguracji! Mam zamiar wypróbować to teraz. –

2
  1. Czy konfiguracja może być lokalna dla wystąpień klas? A może mógłbyś stworzyć małą klasę, która mogłaby stworzyć instancję do zapytania o wartości konfiguracyjne? Przedrostek wszystkich globalnych zmiennych z nazwą aplikacji powinien być sposobem na zatrzymanie konfliktów.

  2. Jeśli twoje szablony są naprawdę proste, po prostu napisz krótki templater. To będzie łatwiejsze niż próbowanie odeprzeć problemy, które ludzie mają z jakimś zewnętrznym templatem. Może to również uprościć problemy z licencjonowaniem. Jeśli zaczniesz się martwić o to, co już mają, nigdy nie wydasz niczego. Jest zbyt wiele kombinacji.

  3. Na 3 struny? Tak, wykonaj te same czynności, co konfiguracja.

  4. Dobre komentarze w całym tekście z wyjaśnieniem, w jaki sposób korzystasz z zajęć.

  5. Nie sądzę. Jeśli ci to przeszkadza, można użyć domyślnych argumentów pierwszy użył podane argumenty, a następnie szukać wartości GET/POST jeśli nie jest warunkiem (choć to może być zagrożenie dla bezpieczeństwa)

Są inne rzeczy, które należy wziąć pod wynagrodzenie.Wiele osób jest na współdzielonych hostach, w związku z czym nie mają kontroli nad ich php.ini lub ich wersją php. Musisz się upewnić, że używasz tylko funkcji, które są tak powszechne, jak to tylko możliwe.

Jednym z przykładów jest to, że shorttags nie są włączone w niektórych gospodarzy (trzeba użyć <?php ... ?> i <?php echo "..."?> zamiast <? ... ?> lub <?= "..." ?>), który może być królewski PITA.

2

Oprócz dobrych rad Krzysztofa:

  • Zastosowanie <?php tylko
  • W przypadku korzystania z funkcji, które mogą być wyłączone, należy function_exists() w celu zapewnienia, że ​​są dostępne. @missing_function() sprawia, że ​​PHP umiera w sposób cichy bez żadnego błędu.
  • Nie można polegać na rzeczach, które można wyłączyć/zmienić za pomocą php.ini. Użyj ini_get(), aby dostosować się do różnych ustawień.
  • Jeśli włączone są , usuń ukośniki tylko z kopii wejściowej - nie modyfikuj globalnych tablic! Bezpieczeństwo jakiegoś kiepskiego kodu może polegać na obecności tych ukośników.
  • Należy się spodziewać, że użytkownicy będą bezmyślnie kopiować kod wklejający & z dokumentacji/strony internetowej.
+0

"Użyj tylko ", Nie jest potrzebny, jeśli byłby ostatnim znakiem pliku. –

+0

Rozumiem, że krótkie tagi mogą powodować problemy - moje pliki PHP są całe PHP, więc to nie jest wielka sprawa. Ale co mnie ominęło "?>"? (Mniejsze ryzyko dodania niezamierzonych dodatkowych spacji?) –

+0

Nie ryzykujesz wydrukowaniem białego spacji na końcu pliku - co może być złe, jeśli chcesz wysłać nagłówki HTTP później w aplikacjach, na przykład rozpocząć sesję. Oczywiście można obejść ten problem z buforowaniem wyjściowym. –