Php 从非根位置引用资源时所需的绝对路径
我一直在寻找一个问题的答案,我试图解决,但似乎无法找到一个明确的解决办法 我正在使用WAMP服务器。创建新网站时,我会在WAMP根目录中创建一个子目录:Php 从非根位置引用资源时所需的绝对路径,php,.htaccess,Php,.htaccess,我一直在寻找一个问题的答案,我试图解决,但似乎无法找到一个明确的解决办法 我正在使用WAMP服务器。创建新网站时,我会在WAMP根目录中创建一个子目录:C:\WAMP\www例如C:\WAMP\www\somesite.com.au。对于每个站点构建,我总是有一个includes目录:C:\wamp\www\somesite.com.au\includes,其中包含每个站点页面需要的所有全局代码片段,例如包含HTML标题内容的include: <meta charset="utf-8"&g
C:\WAMP\www
例如C:\WAMP\www\somesite.com.au
。对于每个站点构建,我总是有一个includes
目录:C:\wamp\www\somesite.com.au\includes
,其中包含每个站点页面需要的所有全局代码片段,例如包含HTML标题内容的include:
<meta charset="utf-8">
<meta name="description" content="">
<meta name="keywords" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- CSS -->
<link rel="stylesheet" href="css/sitename.css">
<!--[if lte IE 9]><link rel="stylesheet" href="css/ie.css"><![endif]-->
<!-- All JavaScript at the bottom, except for... -->
<!--[if lt IE 9]><script src="js/libs/html5.js"></script><![endif]-->
<script src="js/libs/respond.js"></script>
问题是,当我从子目录(例如C:\wamp\www\somesite.com.au\profile\foo.php)中的页面调用include文件时,使用php include:
将找不到包含在其中的资产的任何路径,例如
,因为路径是相对于include
目录的
有没有一种方法可以使用PHP或.htaccess使我的includes
目录中的资产的任何相对路径始终解析,无论我从何处调用include文件?我不想在上传到生产环境时修改任何代码,也不想使用HTML
元素
请注意:我是一名前端开发人员,因此我的PHP/.htaccess技能非常基本
干杯我想你在寻找函数和常数
使用这两个项目,你可以知道你一直在哪里
$currentScriptDir = dirname(__FILE__);
注意:如果您使用的是PHP 5.3>=有一个目录,它直接是脚本所在的目录您应该通过绝对值链接到页面中的每个资产:
当然,你应该对你要放在页面上的每一张图片都这样做。只需首先定义一个ABSPATH
常量,并在应用程序中使用它。但是,如果您的图像是在样式表文件中定义的,您不需要将它们定义为绝对的,只需定义我在这里提到的样式表文件的绝对路径即可
ABSPATH:
例如,通常具有用户友好URL的web应用程序应该使用绝对路径来指向其数据。例如,我习惯于创建一个.htaccess
文件,并将每个调用返回到我的第一个页面index.php,然后我将获得请求URI
,并将路径分为多个部分,然后决定应该向用户显示哪个部分。这是ABSPATH
的思想,我在我的核心类的构造方法中定义了它。可以通过工作项目中的每个脚本访问它。我认为这是将数据发送到页面的唯一方法。这就是我最终让数据正常工作的方法:
在根目录中创建一个config.php
文件,并在每页顶部链接到该文件:
下面是我的config.php
文件的内容:
<?php
/* Absolute paths to the site root */
define( 'ABSPATH', dirname(__FILE__) . '/' );
$path = '/Sitenamehere';
set_include_path(get_include_path() . PATH_SEPARATOR . $path);
或
主要围绕页面性能
干杯你的意思是“css和js”文件不包含在你的页面上,即使包含了页眉也是的,就是这样。html header.php
的内容通过得很好,因为无论我在站点中的何处,我都可以控制包含的路径:
但是在html header.php
是指向资产的链接,例如
,如果我不在根目录中,这些资产的路径与包含相关,则不会通过文件因此,我需要我的includes
目录中指向资产的链接是绝对的,但我不想这样做:http://localhost/_Inception/css/sitename.css
。谢谢,但我想避免使用绝对路径,如:localhost/yourfolder/css/style.css
,因为这样我就需要在准备上载时更改这些路径到生产服务器。你能详细介绍一下你提到的ABSPATH
常量吗?感谢你对答案的补充,但由于我是一名完全的PHP新手,我正在努力实现你的建议,我明白了这个概念,但只是知道在哪里编写PHP代码以及如何调用它。如果我告诉你,你应该更多地了解PHP,你可能会生我的气,但目的是给我提建议。如果您想快速获得它,我可以告诉您,只需使用define()
方法在系统中第一个脚本的顶部定义一个常量,然后使用$\u SERVER[“SERVER\u NAME”]对其进行赋值$_服务器[“SCRIPT_NAME”]
然后在整个应用程序中使用您定义的常量。在来到这里之前,我一直在尽最大努力自己找到这个解决方案,就像我一直做的那样,我宁愿自己解决这个问题,相信我这是最后的办法。看起来Stackoverflow上有很多关于这个话题的报道。我希望我能像编写HTML、CSS和jQuery那样编写PHP代码,但我不能,因为我的技能在于前端web开发,而不是后端开发。我以为这是一个寻求解决方案的地方,不仅仅是建议,也许我错了?不管怎样,谢谢你的帮助。您能否提供一个示例,说明我如何将dirname
函数和\uuuu文件\uuuu
常量集成到我的站点中?很抱歉,我对PHP的理解不是很透彻。我不知道为什么链接到资产的代码块从来没有正确通过?重试:
<?php include (ABSPATH . "/includes/global/html-element.php"); ?>
<?php include "includes/global/html-element.php" ?>