2009-10-09 25 views
1

我知道這個問題可能被使用和濫用....但我不斷看到衝突的論點。那麼,使用php,html和css(+最小的javascript)來構建網站的最佳方式是什麼?我聽說有人將他們的所有文件存儲在根目錄之上的隱藏目錄中,包括,我聽說有人使用包含子目錄(例如類,函數等)的包含文件夾。我聽說有人在上傳文件夾一個獨立的服務器上的單獨目錄一起,像亞馬遜...使用PHP,HTML和CSS的正確站點結構?

那麼什麼是最好的方式來構建一個網站,我應該放在每個文件夾。

備註:對於用戶上傳的照片,如果我爲每個用戶分配默認照片,我會在哪裏放置默認照片(在同一目錄中?)。另外,我應該怎麼表示,在數據庫(默認照片名稱與NULL)記住的時候,用戶可以最多1張照片用他們的用戶ID,它集上傳和

編輯

該網站相當簡單,沒有什麼奢侈。到目前爲止,我有一個類的文件夾,一個功能文件夾,一個表格文件夾,一個模板文件夾(帶有CSS),一個帶有配置文件的包含文件夾,一個上傳文件夾和一個包含字體和東西的驗證碼文件夾用於驗證碼圖片。一切都在公共可訪問的文件夾中,但我正在運行檢查以防止用戶訪問私人數據。

+0

一件事是存儲完整的URL的,因此如果您在網站上採用清潔網址的使用的.htaccess您可以輕鬆地將它們鏈接.. – halocursed 2009-10-09 18:08:34

回答

4

通常以下文件夾結構是非常有用的一個。你當然可以簡化它,例如,如果你不使用框架或者不使用MVC模式。重要的是有一個可公開訪問的web_root。這意味着您的服務器指向該文件夾。例如在Apache httpd.conf中,它將是DocumentRoot。你同時存儲在你的數據庫圖像鏈接必須記住

/application 
    /config 
     application.ini 
    /controllers 
    /views 
    /models 
    bootstrap.php 
/var 
    /log 
/tests 
    /controllers 
    /views 
    /models 
/libraries 
    /mylib 
    /myframework 
/web_root 
    /media 
    /js 
    /css 
    index.php 
    .htaccess 
0

最好的方法是永遠只爲你(或我)的最佳方式;並完全取決於擁有/運營該網站的人的要求。

我建議將所有敏感信息和邏輯放在web根目錄之外,但這只是因爲安全性。否則,只要所有的東西都對你有意義,這並不重要。

如果您更新您的問題與您的要求,那麼我們可以給你一些有用的答案。


編輯

針對以下更新:

該網站是相當簡單的,沒有什麼 奢侈。截至目前,我有一個 類的文件夾, 函數,文件夾的形式,文件夾 的模板(帶有CSS),一個包括 文件夾與配置文件, uploads文件夾和一個驗證碼文件夾 與字體和東西captcha 圖像。一切公開 訪問文件夾,但我運行 檢查,以防止用戶訪問 私人數據。

我非常非常強烈建議移動那些您正在「檢查以防止用戶訪問私人數據」的項目。這是至少有兩個原因,但我最喜歡的是:

  1. 爲什麼如果你不需要工作?(聰明地工作,而不是硬)
  2. Your code和礦山sucks,並有錯誤;爲什麼要暴露自己(和你的用戶)不必要的風險?

如果你不想讓公衆訪問數據不要把它放在什麼地方,他們可以訪問。爲了(嚴格)釋義Crowley:爲什麼要把限制性信息放在人們可以接觸到的地方?

儘管大部分我喜歡你的設計。如果它適合你,那麼我抱怨你存儲的位置,並控制訪問,是無關緊要的。您的數據和模型完全取決於您的口味和用例。如果沒有損壞,請不要修復它。

但是儘可能準備好打破它,因爲它很可能會:用戶是無價的,但它們也是一個危險。


1:我會在這裏鏈接到更多的文章,但我不確定在SO答案中嵌套html。而且我不想過多地混淆格式/降價。但是你明白了,我們用缺陷製造蹩腳的軟件,所以任何檢查都可能是脆弱的。 那麼爲什麼讓自己穿過?

0
/site 
    /app 
    /public_html 
     index.php 
     /js 
     /css 
     /images 

在哪裏/應用程序是下面的Web根目錄,這是/的public_html

1

對我來說,重要的是獨立的系統和數據。如果您有用戶上傳的照片,他們不希望與所有應用程序的靜態圖像位於相同的圖像文件夾下。否則,當您執行應用程序更新時,您將永遠在榨取用戶圖像。

相反,一個文件夾結構是這樣的:

appname 
    system 
     htdocs   (the web root) 
      imgs 
      scripts 
      styles 
     includes  (app code kept outside the root) 
     files   (any other random resources the app needs) 
    data 
     public 
      avatars 
     private  (runtime data that shouldn't be visible to webserver) 

然後你就可以在data設置燙髮允許Web服務器用戶寫入權限,而只是交換了,當你升級的應用程序的整個system目錄。

您可以使用Alias(在Apache中)安裝可公開訪問的運行時數據,因此您可以使用像「http://www.example.com/data/avatars/12345.gif」這樣的URL運行時數據和靜態圖像的「http://www.example.com/img/default-avatar.gif」。

(如果每個用戶都有一個圖像,並且有一個數字用戶ID可以繼續使用,那麼我會將它用於文件名,而不是將每個文件名存儲在數據庫中;那麼您只需要一個布爾標誌用於'用戶有圖像「,否則鏈接默認圖像,你不想做的是允許用戶自己提供一個文件名,因爲這需要很多工作才能使它安全。)

最好?沒有這樣的事情真的。但是這種方法在部署結束時導致我的問題最少。

小心讓用戶上傳圖片。尤其要感謝IE的inne Content-Type嗅探,它可能是一個令人討厭的安全漏洞:圖像可以嵌入HTML中嵌入JavaScript,從而允許跨站點腳本攻擊。這可以通過處理圖像和/或提供來自不同主機名的用戶上傳文件來避免。