php app_root_path,php – APP_ROOT定义不正确

标签:php

过去5天我遇到了一些问题,但我仍然陷入困境.现在我一直在阅读APP_ROOT,因为我不知道那是什么.我有一个header.html,有以下路径:

/Applications/MAMP/htdocs/website/resources/includes/header.html

我需要在我使用的每个页面上都包含它.在用户登录之前,我的文件位于:

/Applications/MAMP/htdocs/website

这也应该是我网站的ROOT.

用户登录后,我将我的php文件拆分为文件夹.

目前我正在处理文件profile.php,它具有以下路径:

/Applications/MAMP/htdocs/Applications/MAMP/htdocs/website/resources/auth/profile.php

我试图在此文件中包含header.html,但是收到以下错误:

Warning: include(resources/includes/header.html): failed to open stream: No such file or directory in /Applications/MAMP/htdocs/website/resources/auth/profile.php on line 2

Warning: include(): Failed opening 'resources/includes/header.html' for inclusion (include_path='.:/Applications/MAMP/bin/php/php5.6.2/lib/php') in /Applications/MAMP/htdocs/website/resources/auth/profile.php on line 2

在stackoverflow上询问了这个之后,我开始阅读有关定义ROOT的内容.我对它并不是很有信心,但这就是我得到的.

我在profile.php工作.我补充说:

echo $_SERVER['DOCUMENT_ROOT'];

在这里,我得到的是我的根:/ Applications / MAMP / htdocs.我认为,根应该是:/ Applications / MAMP / htdocs / website,那么我该如何改变呢?

我跑的时候

echo dirname(__FILE__);

我得到的文件位于:

/Applications/MAMP/htdocs/website/resources/auth

那是对的.

因此,对于我来说,问题是,由于我的ROOT未定义,导致错误.我如何定义根,所以它从/ Applications / MAMP / htdocs变为/ Applications / MAMP / htdocs / website?

我希望有人可以帮助我,所以我可以继续我的项目.

更新:

所以我的标题现在被调用,我现在正在研究CSS和JS部分,我需要在标题中调用它.所以我现在在我的标题中设置它.这是这样的吗?

6yokq.jpg

解决方法:

对于原始问题,原始答案

$_SERVER [‘DOCUMENT_ROOT’]并不总是有用.根据服务器软件及其配置,它可以包含与文件所在路径没有任何共同点的路径.不要依赖它!使用下面介绍的技术,您可以在同一台服务器上托管多个应用程序.当您使用一个开发服务器开发和测试多个应用程序时,这非常有用.可以使用不同URL的HTTP访问每个应用程序,例如: http:// localhost / app1 /和http:// localhost / app2.

处理您的情况的最简单方法是使用相对路径指定要包含的文件,并使用dirname()和__DIR__从它们构建绝对路径.

原理很简单.如果你想在文件web / a.php中包含文件include / b.php,那么你可以在web / a.php中编写:

include dirname(__DIR__).'/include/b.php';

魔术常量__DIR__包含当前文件(web / a.php)所在的目录.我们不需要关心文件系统中的位置; PHP为我们处理它. PHP函数dirname()返回它接收的路径的父目录.

假设我们的项目位于/ path-to-project-.在web / a.php中,__DIR__的值是/ path-to-my-project / web和dirname(__ DIR__)returs / path-to-my-project.这是我们项目的根目录.

剩下的就是小菜一碟.只需附加要包含的文件的位置(在项目内).让我们注意到__DIR__和dirname()都产生不以斜杠(/)1结尾的路径.这就是为什么包含文件的文字路径必须以斜杠开头的原因:/include/b.php.

无论包含文件与包含者的相对位置如何,都可以使用该技术.您所要做的就是使用正确的dirname()调用次数来访问两个文件的第一个共同祖先目录(不一定是项目根目录),从那时起您就可以访问包含的文件.

例如,如果要在web / admin / d.php中包含include / b.php,则d.php必须包含:

include dirname(dirname(__DIR__)).'/include/b.php';

但是如果你想在web / a.php中包含web / c.php,那么你甚至不需要调用dirname():

include __DIR__.'/c.php';

仅限PHP 7

如果您使用的是PHP 7,则可以通过将级别数作为第二个参数传递,将dirname()的嵌套调用列表压缩为单个调用:

// Any version of PHP

include dirname(dirname(dirname(__DIR__))).'/include/b.php';

// Only PHP 7 and newer

include dirname(__DIR__, 3).'/include/b.php';

1此规则有一个例外:如果生成的路径是根目录(/),则__DIR__的值和dirname()返回的值不是空字符串而是/(以斜杠结尾).

更新答案以匹配问题的更新(关于CSS和JS文件)

您在HTML标头中编写的URL以加载CSS和JS是一个不同的故事.它们是(完整或部分)URL,而不是本地驱动器上的路径(与答案的第一部分相反,其中包括使用本地文件的路径.)

我上面的示例是Web应用程序的典型配置. Web服务器配置为从web /目录提供文件.那是$_SERVER [‘DOCUMENT_ROOT’]是/ path-to-my-project / web.当用户请求http://localhost/a.php时,服务器会加载并运行/path-to-my-project/web/a.php.

只能通过HTTP访问存储在web /及其子目录中的文件.您只放置了可以访问的文件:应用程序的页面和资源(图像,脚本,样式表).所有不能单独使用的文件(包含在其他文件中)必须位于web /目录之外.例如,在include /中.

资源通常位于web /目录的子目录中;图像中的图像/,js /中的脚本/样式/或css /中的样式表,但这不是规则;每个项目都使用自己的名字.

可以使用部分URL访问它们:图像为< img src =“/ images / file1.jpg”>,样式表为< link rel =“stylesheet”href =“/ css / style1.css”&gt ;,脚本as< script src =“/ js / script1.js”>.到其他页面的链接写为< a href =“/ m.php”> (m.php位于web /)或< a href =“/ admin / login.php”> (login.phpis当然位于inweb / admin /`).

浏览器将使用当前协议和主机名从中计算完整的URL.例如,为了加载/js/script1.js,浏览器计算其完整的URL(http://localhost/js/script1.js)并向服务器询问它.服务器(localhost)接收对资源/js/script1.js的请求.它知道站点根目录(/)映射到目录/ path-to-my-project / web,计算文件系统中的完整文件路径为/path-to-my-project/web/js/script1.js并返回其内容.

标签:php

来源: https://codeday.me/bug/20191002/1844384.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值