使用PHP,HTML和CSS的正确站点结构?

时间:2009-10-09 17:32:40

标签: web structure

我知道这些问题可能已被使用和滥用......但我一直看到相互矛盾的论点。那么,使用php,html和css(+最小javascript)构建网站的最佳方法是什么。我听说人们将所有文件存储在根目录上方的隐藏目录中,包括,我听说有人使用包含子目录的include文件夹,例如类,函数等。我听说有人在上传文件夹中一个单独的服务器上的一个单独的目录,如亚马逊......

那么究竟什么是构建网站的最佳方式,以及我应该在每个文件夹中放置什么。

旁注:对于用户上传的照片,如果我要为每个用户分配默认照片,我会在哪里放置默认照片(在同一目录中?)。此外,我应该如何在数据库中表示(默认照片名称与NULL)时,用户可以上传最多1张照片,并使用其用户ID进行设置

修改

该网站相当简单,没有任何奢侈。截至目前,我有一个类的文件夹,一个函数文件夹,一个表单文件夹,一个模板文件夹(带有css),一个包含配置文件的文件夹,一个uploads文件夹,以及一个包含字体和东西的captcha文件夹用于验证码图像。一切都在公共可访问文件夹中,但我正在运行检查以防止用户访问私人数据。

4 个答案:

答案 0 :(得分: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  

答案 1 :(得分: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上设置perms以允许Web服务器用户写入访问权限,并在升级应用程序时替换整个system目录。

您使用Alias(在Apache中)安装可公开访问的运行时数据,因此您可以使用“http://www.example.com/data/avatars/12345.gif”等网址运行时数据和静态图像的“http://www.example.com/img/default-avatar.gif”。

(如果每个用户都有一个图像,并且有一个数字用户ID可以继续,我会将其用于文件名,而不是将每个文件名存储在数据库中;那么你只需要一个用户名的布尔标志有图像',否则链接默认图像。你不想做的是允许用户自己提供文件名,因为这需要大量的工作才能使它安全。)

最佳?真的没有这样的事情。但是这种方法在部署结束时导致我的问题最少。

小心让用户上传图片。特别是由于IE的内容类型嗅探,它可能是一个令人讨厌的安全漏洞:图像可以包含嵌入JavaScript的HTML,允许跨站点脚本攻击。这可以通过处理图像和/或从不同的主机名提供用户上载的文件来避免。

答案 2 :(得分:0)

最好的方式对你(或我)来说只是最好的方式;并完全取决于拥有/运营网站的人的要求。

我建议将所有敏感信息和逻辑放在web-root之外,但这只是因为安全性。否则,只要对你来说一切都有意义就无所谓了。

如果您根据自己的要求更新问题,我们可以为您提供一些有用的答案。

<小时/> 的被修改

响应以下更新:

  

该网站相当简单,没有   靡。截至目前,我有一个   类的文件夹,文件夹   功能,表单文件夹,文件夹   模板(带有css),一个包含   带有配置文件的文件夹,   uploads文件夹和captcha文件夹   用于验证码的字体和东西   图片。一切都在公共场合   可访问的文件夹,但我正在运行   检查以防止用户访问   私人数据。

我非常非常强烈地建议移动那些你正在“检查以阻止用户访问私有数据”的项目。这至少有两个原因,但我最喜欢的是:

  1. 如果你不需要,为什么要工作? (聪明地工作,而不是努力工作)
  2. Your code和我的 1 sucks,并且有错误;为什么要让自己(和你的用户)面临不必要的风险呢?
  3. 如果您不希望公众访问数据,请不要将其放在可以访问的位置。 (严厉地)解释Crowley:为什么要将限制性信息放在人们能够达到的地方?

    在大多数情况下,我喜欢你的设计。如果它适合你,那么我对你存储和控制访问权限的抱怨是无关紧要的。您的数据及其型号完全取决于您的品味和用例。如果没有损坏,请不要修理它。

    但要尽可能准备好让它破裂,因为它很可能会:用户非常宝贵,但它们也是一种危险。

    <小时/> 1:我会在这里链接到更多的文章,但我不确定在SO答案中嵌套html。而且我不想太多地混淆格式/降价。但是你明白了,我们制作了带有错误的糟糕软件,所以任何检查都可能很脆弱。 那么为什么要让自己完成这个呢?

答案 3 :(得分:0)

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

其中/ app位于网络根目录下方,即/ public_html