0

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

/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/导致包括并发症的部分。

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

4

2 回答 2

2

认为您需要使用__DIR__常量才能从任何文件中相对包含文件。但更好的是,我认为为您的根文件系统路径定义一些常量,例如

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

并且当通过这个常量相对包含文件时。此外,它还允许您为每个使用的重要文件夹添加常量,如果要更改路径,您只需更改一些常量值

于 2013-04-10T17:30:19.357 回答
1

根据您的评论,它对您来说是一个包含,CSS基本上不用担心您的 PHP 文件在哪里,只需从服务器的角度(Web 端)进行操作:

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

对于/include/css您的应用程序文件夹中的文件(网络公开)

更新:

根据您更新的评论,您应该为您的应用程序(配置)存储一个变量,并调用像 CodeIgniter 一样的函数:

$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

于 2013-04-10T17:44:00.890 回答