0

我正在做我的第一个相当大的 php 项目。我决定从头开始构建一切,没有任何框架。

首先,我有以下结构:

index.php
includes/            //all php pages, except index.
includes/scripts/    //all php classes that do not print web pages.
styles/              //all my css files.
images/              //all images used on the website.

但是,当包含来自各种文件夹的文件时,这给我带来了麻烦。

我现在已将其更改为:

index.php
the rest of my .php files
styles/
images/

我所有的包含现在都可以正常工作,而不必在文件夹之间跳转。但我觉得我对我的项目失去了概述。

目前我对如何做事有点迷茫。从书上看,对我的文件夹进行分组并包含我的文件的正确方法是什么?

编辑:我还希望看到一些关于实际包含文件的提示。无论在哪里调用 include() 都有哪些包含文件的技术?一个具体的例子,根据我的第一个结构。

includes/scripts在,中有一个脚本login.phplogin.php然后包含page.php(一个简单的页面模板)来自includes/. page.php将包括模板的几个部分 ( header.php, footer.php)。但我也不得不page.phpinclude/.

page.php这给我带来了麻烦,因为如果从includes/或从调用相对路径会有所不同includes/scripts/

4

4 回答 4

2

您的问题可能是由相对路径引起的。

这可以通过使用绝对路径来解决,例如:

require_once("/var/www/clients/client05/web29/web/includes/scripts/myClass.php");

为了更容易,您还可以在index.php(或任何其他每次都会包含的文件)中定义常量

define("WEB_ROOT", "/var/www/clients/client05/web29/web/");
define("INCLUDES_DIR", WEB_ROOT . "includes/");
define("SCRIPTS_DIR", INCLUDES_DIR . "scripts/");

然后可以轻松包含文件

    require_once(SCRIPTS_DIR . "myClass.php");
    require_once(INCLUDES_DIR . "acp.php");
于 2012-09-30T17:44:42.453 回答
1

一个直截了当的建议:

index.php
app/
styles/
images/

所有 PHP 代码都进入app/并可以按照您认为合适的方式进一步组织,例如一个目录用于您的模板,一个用于存储第三方代码,然后是您为应用程序构建的自己的库。

您应该可以app随时将文件夹移动到磁盘上的任何其他位置,尤其是文档根目录之外。

使用所谓的前端控制器最容易做到这一点,该控制器将所有进入应用程序的请求路由到相关代码(从技术上讲,这甚至可以让您同时拥有多个应用程序)。

在上面的布局中,index.php扮演这个角色。它是您的应用程序的入口点。

于 2012-09-30T17:26:53.333 回答
1

您不应只考虑文件,而应考虑如何与资源交互的策略

由于 PHP 现在有很好的面向对象支持,您可以利用命名空间,并按照您喜欢的方式在文件夹中组织您的类。

如果您不想使用框架[我强烈建议您这样做,因为它会使您的应用程序更安全且更易于维护],您会发现这篇文章对如何组织您的结构很有启发性。

你可以选择像symfony 自动加载器这样的组件来加载你想要的类,然后根据你的文件系统组织处理所有其他资源 [css、js、图像]。

于 2012-09-30T17:27:30.287 回答
1

我首选的组织结构包括:

index.php和根目录中的所有其他 php 页面 ("/")
/includes/(包含模板项目的目录,如页眉、页脚、分析代码等...任何经常重用的内容)
/includes/classes/(用于 php 类)
/images/(自我解释;我还根据我的图像最合理的组织在其中使用了几个目录)
/style/(对于 css,带有用于字体文件的“/style/fonts/”目录)
/scripts/(对于 js 或类似的)
/support/(对于我可能正在使用的任何设置文件)

于 2012-09-30T17:28:12.197 回答