2008-11-12 47 views
7

我編寫了一個我想分發的小型PHP應用程序。我正在尋找最佳實踐,以便它能夠以最小的麻煩安裝在大多數虛擬主機上。分發小型PHP應用程序

簡而言之:它是一個簡單的工具,可以讓用戶在用密碼登錄後下載文件。

所以我的問題是:

1)我應該如何處理配置值?我沒有使用數據庫,所以配置文件似乎是適當的。我知道其他php應用程序(例如Wordpress)使用定義,但它們是全球性的,並且名稱會有衝突。 (顯然,全局變量也有同樣的問題。)我查看了PHP中內置的「ini」文件機制。它只允許頂部的註釋 - 所以你不能輕鬆地註釋每個設置 - 而且你不能用「php -f」來驗證語法。其他選項?

2)如何處理模板?應用程序需要抽出一張表格。可能帶有錯誤信息。 (例如「對不起,錯誤的密碼」)。我已經有了HTML表單的類變量,但也允許使用外部模板文件(在config中指定)。我做一些簡單的搜索和替換 - 例如%SCRIPT%添加到腳本的名稱中,%STATUS%保存錯誤消息。這感覺有點像重新發明輪子,但包括像Smarty這樣的模板系統是矯枉過正的。 (另外他們可能已經有模板系統。)其他選項?

3)i18n - 只有3個消息字符串,並且gettext似乎沒有普遍安裝。僅僅在配置文件中創建這三個字符串參數是不是一個好主意?

4)如何最好地與其他框架集成?我的應用程序是一個類。所以,我想我可以包含一個php腳本,顯示這個類是如何被調用的。對於那些不得不將其整合到另一個框架中的人來說,這將是一個起點,但對那些對定製不感興趣的人來說,這也是一件好事。合理?

5)GET/POST參數 - 一個類是否看到$ _GET和$ _POST的錯誤形式?施工期間是否應將所有的價值傳遞給我的班級?

謝謝。

回答

7

配置

您可以使用PHP文件是這樣的:

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

,並在主類只需使用:

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

如果你打算大多分佈類如其他應用程序中的組件,然後只需將config數組/對象作爲參數放入類的構造函數中,並將詳細信息留給用戶。

模板

對於這樣簡單的應用,您描述的方法應該足夠了。請記住,一個人可以隨時擴展你的班級,並用他自己的方式超載你的輸出方法

I10N

正如前面提到的,對於3個變量東西不是將它們存儲的配置僅僅是矯枉過正了。

集成

評論每個公共方法(甚至更好也protected和private的)與解釋他們做什麼和需要什麼樣的參數。如果你將它與一個例子結合起來,對大多數用戶來說就足夠了。

GET vs POST

你的班級使用密碼,你甚至想通過GET發送它們? ;) 想想瀏覽器歷史記錄,引用標頭等 - 您的用戶的密碼將在那裏可見。

+0

我喜歡這種配置風格!我現在要試一試。 – 2008-11-13 00:52:42

2
  1. 配置可以是類實例的本地嗎?或者你可以創建一個小類,你可以創建一個查詢配置值的實例嗎?同時在你的應用程序的名字前加上全局變量也應該採取某種方式來阻止衝突。

  2. 如果您的模板非常簡單,只需編寫一個簡短的模板。這會比試圖抵禦人們使用任何第三方模板的問題容易得多。它也可能簡化授權問題。如果你開始擔心他們已經擁有了什麼,你永遠不會發布任何東西。組合太多了。

  3. 3串?是這樣做你正在處理配置相同的方式。

  4. 好評如下,介紹如何使用這個類。

  5. 我不這麼認爲。如果你煩惱,你可以使用默認參數先使用給定的參數,然後搜索GET/POST值如果沒有提供(儘管這可能是一個安全隱患)

還有其他事情要考慮考慮。很多人都在共享主機上,因此無法控制他們的php.ini或他們的php版本。您需要確保您只使用盡可能平常的功能。

一個例子是shorttags不上的某些主機啓用(你必須使用<?php ... ?><?php echo "..."?>而不是<? ... ?><?= "..." ?>),它可以是一個王室PITA。

2

除了基耶斯洛夫的好建議:

  • 使用<?php只有
  • 如果使用,可以禁用功能,使用function_exists(),以確保它們可用。 @missing_function()讓PHP靜靜地死去,沒有記錄任何錯誤。
  • 你不能依靠可以通過php.ini禁用/更改的東西。使用ini_get()來適應不同的設置。
  • 如果magic_quotes已啓用,則僅從您的輸入副本中去除斜線 - 不要修改全局數組!一些不良代碼的安全性可能依賴於這些斜線存在。
  • 預計用戶將無意中從您的文檔/網站複製&粘貼代碼。
+0

「僅使用<?php」 換句話說,省略「?>」結束標記,如果它是文件的最後一個字符,則不需要。 – 2008-11-13 00:00:18