我的大多数网站都在我的根目录中。在该目录中有“css”,“functions”,“images”文件夹。当我在index.php或任何其他根文件中包含php文件时,一切正常。它包括它并且执行得很好。
但是当我制作文件夹“博客”时出现问题。所以这是一个全新的单独的根文件夹与CMS及其自己的“根”文件。我尝试从主根目录中包含css或从主根目录中的“functions”文件夹中包含一些php文件,Everything会崩溃。我知道我必须将其包含为../functions/myfile.com
。但是这些文件包含一些其他文件,因此它无法正常工作,并且无法正确包含其他文件。
有任何想法如何解决这个问题吗?
答案 0 :(得分:17)
您可以使用$_SERVER['DOCUMENT_ROOT']
从每个网站转到root。 仅用于测试,您可以回显路径以确保其正常工作,如果您以正确的方式执行此操作。您永远不希望显示includes等内容的本地服务器路径和requires.
网站1
echo $_SERVER['DOCUMENT_ROOT']; //should be '/main_web_folder/';
在网站1下面包括:
echo $_SERVER['DOCUMENT_ROOT'].'/includes/'; // should be '/main_web_folder/includes/';
网站2
echo $_SERVER['DOCUMENT_ROOT']; //should be '/main_web_folder/blog/';
要访问的实际代码包括 site2 中的 site1 ,您会说:
include($_SERVER['DOCUMENT_ROOT'].'/../includes/file_from_site_1.php');
如果您尝试通过排除document root
和root
斜杠来访问该文件,它将仅使用执行查询的文件的相对path:
//(not as fool-proof or non-platform specific)
include('../includes/file_from_site_1.php');
包含的路径在任何地方的网站前端(实时)代码中都没有位置,并且应仅在生产环境中受到保护和使用。
此外,对于网站上的网址,您可以将其设置为相对于域名。浏览器将自动填写其余部分,因为他们知道他们正在查看哪个页面。所以而不是:
<a href='http://www.__domain__name__here__.com/contact/'>Contact</a>
您应该使用:
<a href='/contact/'>Contact</a>
对于良好的搜索引擎优化,您需要确保其他域中不存在该博客的URL,否则可能会将其标记为重复的网站。话虽如此,您可能还想在robots.txt
文件中为仅 site1 添加一行:
User-agent: *
Disallow: /blog/
Look up your IP address并包含以下代码段:
function is_dev(){
//use the external IP from Google.
//If you're hosting locally it's 127.0.01 unless you've changed it.
$ip_address='xxx.xxx.xxx.xxx';
if ($_SERVER['REMOTE_ADDR']==$ip_address){
return true;
} else {
return false;
}
}
if(is_dev()){
echo $_SERVER['DOCUMENT_ROOT'];
}
请记住,如果您的ISP更改了IP,就像您拥有DCHP动态IP一样,您需要更改该文件中的IP以查看结果。我会把那个文件放在include中,然后在页面上要求它进行调试。
如果你对使用浏览器console log这样的现代方法感到满意,你可以这样做,并在浏览器的调试界面中查看它:
if(is_dev()){
echo "<script>".PHP_EOL;
echo "console.log('".$_SERVER['DOCUMENT_ROOT']."');".PHP_EOL;
echo "</script>".PHP_EOL;
}
答案 1 :(得分:7)
如果我理解正确,你有两个文件夹,一个是你想要include
的php脚本到另一个文件夹中的文件中?
如果是这种情况,您只需要以正确的方式跟踪。 我们假设您的文件夹设置如下:
root
includes
php_scripts
script.php
blog
content
index.php
如果这是建议的文件夹结构,并且您尝试将“Script.php”文件包含在“index.php”文件夹中,则需要以这种方式包含它:
include("../../../includes/php_scripts/script.php");
我这样做的方式是视觉。我把我的鼠标指针放在index.php上(查看文件结构),然后每次我上去一个文件夹,我键入另一个“../”然后你必须确保你上去文件夹结构上面的文件夹你想要开始进入。之后,它只是普通的文件夹层次结构。
答案 2 :(得分:2)
上述答案都没有为我解决这个问题。 我这样做(Laravel with Ubuntu server):
<?php
$footerFile = '/var/www/website/main/resources/views/emails/elements/emailfooter.blade.php';
include($footerFile);
?>
答案 3 :(得分:1)
尽量不要使用相对路径。使用通用include,将DocumentRoot服务器变量分配给全局变量,并从那里构造绝对路径。或者,对于大型项目,请考虑实施PSR-0 SPL自动加载器。
答案 4 :(得分:0)
我遇到了同样的问题,并在 https://css-tricks.com/php-include-from-root/ 上找到了修复它的代码
<?php
$path = $_SERVER['DOCUMENT_ROOT'];
$path .= "/common/header.php";
include_once($path);
?>