我正在开发一个PHP项目,我在require_once中遇到了文件路径问题。
2个文件的文件夹结构如下:
- 图书馆
实施例
在“当前页面”中我有一个
require_once ('../HTML2PDF/html2pdf.class.php');
但它给了我这个错误:
failed to open stream: No such file or directory in
我错过了什么?
答案 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_register
,the 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');