2013-04-10 152 views
0

我环顾四周寻找答案,希望我没有错过它或不重复它,但它在这里。我有两个文件:PHP路径位置

/var/www/index.php

/var/www/include/php/header.php

指数包括header.php文件。我希望头文件能够遍历两个级别,所以我可以包括/include/css/index.css。这里的问题,头也包括通过文件,如

/var/www/sub/page.php

,所以我不能简单地用../../以来的PHP文件更改位置。我尝试使用$_SERVER['PHP_SELF'],但这取决于包含头文件的php文件的位置。我也试过dirname(__FILE__),但是这给了我包括/var/www/部分,导致并发症。

本质上,我想从包含的header.php文件中获取$_SERVER['PHP_SELF']的值,而不是从包含它的php脚本中获取值。我希望网站是模块化的,所以它可以发布到任何地方,而不必担心文件位置会混乱。有没有更简单的方法来做到这一点?

+0

你包括你的'CSS'为HTML包括哪些内容?或者将PHP include包含在文档中?因为你会做一个不同的方法... – Jakub 2013-04-10 17:33:46

+0

作为一个HTML包含。我最初的想法是让那些包含根文件夹绝对路径的前缀,以便如果这个网站被移到不同的层次上,它不会受到影响。 – Cody 2013-04-10 17:42:25

+0

检查此答案以从路径中获取Url http://stackoverflow.com/a/36101073/3626097 – fallinov 2016-06-17 12:35:47

回答

1

根据你的评论,它是一个包括CSS你基本上不用担心WHERE你的PHP文件,只是做了从服务器的角度(网络侧):

<link rel="stylesheet" type="text/css" href="/include/css/index.css"> 

对于文件在您的应用程序(网络曝光)

更新的/include/css文件夹:

根据您的UPD ated评论,您应该存储变量为您的应用程序(配置),并呼吁像笨某个功能:

$domain_url= "http://".$_SERVER['HTTP_HOST']; 
$domain_url.= tr_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']); 

function base_url($url){ 
    return $domain_url + $url; 
} 

echo base_url("include/css/index.css"); 

编号:http://ellislab.com/codeigniter/user-guide/helpers/url_helper.html

+0

这些问题是我的网站不一定在web根目录下,所以它可能是/mywebsite/include/css/index.css,我不想将它编入/ mywebsite/part,我希望它只是去从该头文件要查找的位置开始的两个级别包括在内。 – Cody 2013-04-10 17:47:38

+0

然后你需要做一些类似于CodeIgniter的base_url(),你可以在其中定义根URL(http://domain.com/subsite/),并在你的代码中使用该fn来为你的CSS资源添加前缀。 – Jakub 2013-04-10 17:51:17

+0

感谢您的更新。我想过这样做,我只是想知道是否有一种自动的方式,而不必自己输入字符串。 – Cody 2013-04-10 17:57:45

2

认为您需要使用__DIR__常量才能够包含来自任何文件的相对文件。 不过还好我想定义你的根文件系统路径的一些常数,像

define('FS_ROOT', 'root path here'); 

,当包含文件相对这个常数。此外,它会允许你为每个使用的重要文件夹添加常量,如果改变路径,你将需要改变一些常量值

+0

__dir__的问题在于它提供了磁盘绝对路径,而不是导致我遇到问题时的Web绝对路径试图包括我的CSS。 – Cody 2013-04-10 17:51:12

+0

对于.CSS ant其他URL只需为基础URL添加一个常量+为更深层次添加相同常量。不要忘记 2013-04-10 19:02:16

+0

基本标签的工作原理正是我想要的。现在我只需要相当于php的。 – Cody 2013-04-10 19:47:56