请教一个thinkphp中文件引入路径的问题?

  1. 使用thinkphp5.1, 在视图文件夹里后台首页的html文件中, 引入publicstaticadminStyles下的css样式文件.
    <link href="/static/admin/Styles/general.css" rel="stylesheet" type="text/css" />
  2. /static左边的"/" 指的是www.shop.com/public吗?
  3. php里"/"指的是根目录, www.shop.com/public就是根目录?
  4. 这问题其实很简单也很好理解, 但自己没有实战体验, 总感觉差点意思. 刚开始时还纳闷过为什么根目录不是shop目录? 或者是shop目录下的其它目录, 而偏偏是public?
  5. 上面一切的原因是在配置文件或者phpstudy域名管理配置过, 想问的是, 完成这个配置, 发生了什么? (www.shop.com/public = 根目录 = /?)
  6. 这问题可能非常简单没价值, 但刚开始看框架, 命名空间和各种引入路径问题容易出错, 所以想仔细过一遍.

图片描述

图片描述

阅读 3k
3 个回答
  1. 单机层级。文件系统的 root 目录,类Unix 的文件系统的根目录为 /,Windows 没有根目录这一概念,PHP 在操作(引入)文件的时候需要指明文件的路径,其绝对路径的写法,在 类Unix 可能为 /path/to/file/,在 Windows 可能为 C:\path\to\file,而相对路径的写法则都是以 ./../
  2. 网络层级。网站的 root 目录,是 HTTP Server(如 nginx、apache)的配置文件内的 root 所指定的对外开放的目录,建议你去 phpstudy 的安装目录下看看配置文件而不是仅用GUI,网站的访问者只知道 http://www.shop.com/,网站的 .html 文件也只知道 http://www.shop.com/(如你截图所示)
  3. 本例选择 public 作为 root 目录,完全是 ThinkPHP 框架开发者决定的。

「为了安全」。

在以前,很多 web 网站的入口都是在项目根目录下,这样的问题就是,你整个项目的里面的所有文件都是可被访问的,比如你的日志,你的数据库备份,或者你传上去的源码压缩包,又或者 .git 目录,这些都是非常危险的,别人可以通过字典扫描你的结构,根据常用的规则在你网站根目录下扫描出这些个信息,对网站的安全造成威胁。

而,当 public 指定为网站访问根目录时,通过常规的请求,攻击者或用户能拿到的内容仅限于 public 目录下,如果这样,这些问题就不复存在了吗?不是的,如果有些框架有 bug ,攻击者照样可以通过 ../ 的方式来访问上级目录(资源文件限定不存在此类问题),这就要看框架的处理。

这里你就需要了解一些有关跨目录配置的信息。

前面3点问题:

网站的根目录是www.shop.com/
站点的根目录是 c:\..(省略了中间)..\www\shop\public

第5个问题:

而phpstudy将2者关联起来,访问www.shop.com/index.html,相当于访问c:\..(省略了中间)..\www\shop\public\index.html

第4个问题:

因为thinkphp项目的入口文件(index.php)在public

第6个问题:

命名空间和路径没有关系。
只是我们在日常使用过程中为了方便阅读、编写代码,将命名空间和路径关联上了而已。
这样看一眼命名空间就知道文件在哪了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题