我一直面临着PHP包含的问题。根据互联网的读数,我一直在使用相对路径来获得灵活性。
只要我在每个文件中直接引用路径,例如
require_once '../includes/connection.php'; // it works fine.
当我使用全局常量
引用此路径时,问题就开始了require_once getDocumentRoot() . '/includes/connection.php',
因为它说下面的错误。
Warning: require_once(/phpPractices/myApp/includes/connection.php): failed to open stream: No such file or directory in /Applications/XAMPP/xamppfiles/htdocs/phpPractices/myApp/dir1/list.php on line 19".
我一直在阅读SO中的这么多主题,并遵循
这样的建议我的函数getDocumentRoot()定义如下。
function getDocumentRoot()
{
$loc_pos_2 = strpos($_SERVER['REQUEST_URI'], "/", 1);
$baseDir = substr($_SERVER['REQUEST_URI'], 0, $loc_pos_2);
$baseDir = $baseDir . "/myApp";
return $baseDir;
}
注意: 我可以看到该文件实际存在。但是,file_exists()方法返回false,我不明白为什么。可能它可能引起关注?
仅供参考,我的目录结构如下。
htdocs
phpPractices
myApp --> Web App Root
includes
connection.php
inc
header.php
footer.php
global.php -- contains getDocumentRoot() method and included in header.php
index.php
dir1 --> my module specific dir
list.php --> which needs 'connection.php'
我的list.php包含以下内容
<?php
include_once '../inc/header.php'; // it works fine as I do relative to the path
//require_once '../includes/connection.php'; //works fine
require_once getDocumentRoot() . '/includes/connection.php'; // FAILS! :(
?>
但没有任何帮助!任何建议摆脱这个问题将不胜感激。
提前致谢!
解
感谢所有回复过的人。我有一个新的解决方法,有点帮助我:)。
1. For all the menu items with links:
I use my getDocumentRoot() method which provides me -
'/phpPractices/myApp/' --> which is relative to my Web App.
2. For all the include, require functions :
I defined a different constant as below & as per this link:
https://stackoverflow.com/a/1488293/1001242
define('APP_BASE_PATH', $_SERVER['DOCUMENT_ROOT'] . '/myApp');
which returns me the complete absolute path which works fine for file inclusion.
我一直在干涉这两者。对于文件包含,getDocumentRoot()的“/ phpPractices / myApp”输出失败,因为它试图在根目录(“/ phpPractices /”)中找到名为“phpPractices”的目录,这是根本原因。因此,我将这些分成两部分,现在工作正常。
谢谢大家。非常感激。
答案 0 :(得分:1)
更新你的getDocumentRoot()函数以返回绝对路径
function getDocumentRoot()
{
return dirname(__FILE__);
}
或在您的要求中使用dirname(__FILE__)