PHP项目中的相对路径

时间:2013-12-16 08:27:38

标签: php path include

我正在开发一个PHP项目,我在require_once中遇到了文件路径问题。

2个文件的文件夹结构如下:

- 图书馆

  • 实施例

    • 当前页面
  • HTML2PDF
    • 要包含的文件

在“当前页面”中我有一个

require_once ('../HTML2PDF/html2pdf.class.php');

但它给了我这个错误:

failed to open stream: No such file or directory in

我错过了什么?

5 个答案:

答案 0 :(得分:2)

尝试

require_once (__DIR__ . '/../HTML2PDF/html2pdf.class.php');

因为它会为您提供当前文件的绝对路径

答案 1 :(得分:2)

您可以在中央配置文件中定义全局应用程序根目录。假设您的应用根目录中有config.php。然后做一个

define("APP_ROOT", dirname(__FILE__));

你仍然需要包含配置文件,你必须为它使用相对路径,例如

include ("../../../config.php");

但是一旦你完成了,你可以相对于脚本中的app root工作:

include (APP_ROOT."/b.php");  <--  Will always return the correct path

答案 2 :(得分:1)

也许你的当前页面本身被另一个页面调用(让我们称之为page3)。

在第3页中,找不到相对文件路径../HTML2PDF/html2pdf.class.php,因为它是当前页面的相对路径。

您应该使用文件相对路径:

require_once (__DIR__ . '/../HTML2PDF/html2pdf.class.php');

require_once (dirname(__FILE__) . '/../HTML2PDF/html2pdf.class.php');

答案 3 :(得分:1)

require显示的文件显然包含类定义。 “管理”手动需求对小项目来说都很好,但是随着项目的增长,以及依赖于某些类在不同文件中可用的编写代码,你会发现自己一个正确的泡菜。请,请使用自动加载器
这也是一个非常容易使用且方便的功能:spl_autoload_registerthe docs are quite easy to understand

您可以在单个文件中创建此自动加载器,例如在项目根目录中,并定义一个常量,让我们称之为PROJECT_ROOT

define('PROJECT_ROOT', realpath(__DIR__).'/');

从那时起,您知道您的类所在的位置,要查看的目录以及文件名的外观。假设我有一个名为DB_Mapper的类,该函数可能如下所示:

function myAutoloader($class)
{
    $path = implode('/',explode('_', $class));
    $path .= '.class.php';
    if (file_exists($path)) require $path;
    else throw new RuntimeException($class.' not found @'.$path);
}

但这只是一个基本的例子......

答案 4 :(得分:0)

您可以在配置文件中设置路径。

if ($_SERVER['REMOTE_ADDR']=='127.0.0.1') { // If you are working in local server
        define("PATH",$_SERVER['DOCUMENT_ROOT'].'/[Folder Name]/'); 
        define("URL","http://".$_SERVER['SERVER_NAME'].'/[Folder Name]/'); 
        }
        else {
        define("PATH",$_SERVER['DOCUMENT_ROOT'].'/'); 
        define("URL","http://".str_replace('www.','',$_SERVER['SERVER_NAME']).'/'); 
        }

    and you can call

 require_once (PATH.'HTML2PDF/html2pdf.class.php');