我对php中的正斜杠如何工作感到困惑。它是否返回Web根目录?还是计算机文件root?或其他什么?
我尝试了几件事,例如,我在ubuntu服务器中的文件结构是这样的:
/var/www/html/domainname.com/.
--/config/.
--/core.php
--/images/.
--/includes/.
--/footer.php
--/header.php
--/navigation.php
--/index.php
这是工作(所有这些都包含在index.php
中):
<img src="/images/logo.png" /> # in header.php
<a href="/">Home</a> # in navigation.php
<a href="/test/test.php">test</a> # in index.php itself
这不起作用:
<?php require_once('/config/core.php'); ?>
<?php include_once('/includes/header.php');?>
<?php include_once('/includes/navigation.php');?>
<?php include_once('/includes/footer.php');?>
为什么最后四个例子不起作用? “/”字符应该返回domainname.com
对吗?或者它返回“/ var / www / html /”而不是?
我的目标是将所有需要包含在includes
目录中的文件。因此,即使.php
文件存储在子目录中,每个.php
文件也可以相对访问它们。
答案 0 :(得分:2)
现在我明白了。正斜杠/
在.php
和.html
文档中的工作方式不同。
在.php
个文件中,/
表示计算机的根文件夹,/
在unix中,C:
在Windows中,如Forien在评论中说。但是,在.html
个文件中,/
表示网站的根文件夹,或者在我的情况下为/var/www/html/domainname.com/
。这就是为什么我混淆了lmho。
所以,这段代码:
<a href="/">Home</a>
<img src="/images/logo.png" />
将查看/var/www/html/domainname.com/
,即使它是用.php
文件编写的。因为.php
个文件会将其作为.html
文件发送给浏览器。这个也是如此:
<?php echo '<a href="/">Home</a>'; ?>
上面的这个仍在/var/www/html/domainname.com/
中查看,因为.php
个文件将其作为.html
文件回显给网络浏览器。
但是,这将是不同的:
<?php require_once '/includes'; ?>
它将在unix中的/
或Windows中的C:
中查找。因为.php
文件在服务器计算机中工作。这就是为什么最后一个不起作用的原因。服务器根目录中没有/includes
目录。所以,为了使其有效,我必须使用它:
<?php require_once $_SERVER['DOCUMENT_ROOT'].'/includes'; ?>
如果我是对的,那就是我的结论。
答案 1 :(得分:0)
为什么最后四个例子不起作用? &#34; /&#34;性格应该 返回domainname.com吧?
错误。它实际上搜索路径/config/core.php
,/includes/header.php
等
从路径的开头删除/
或添加./
,然后它将从当前工作目录中搜索。您可以使用./
和../
相对搜索文件。
您也可以使用/设置PHP配置include_path
。
http://php.net/manual/en/ini.core.php#ini.include-path
还要查看日志以便更好地理解。 :)
<强>更新强>: 另请查看chdir,这可能会对您有所帮助。
chdir('/var/www/html/domainname.com');
<?php require_once('./config/core.php'); ?>
<?php include_once('./includes/header.php');?>
<?php include_once('./includes/navigation.php');?>
<?php include_once('./includes/footer.php');?>