[英]Relative path in a PHP project
我正在開發一個PHP項目,在require_once中的文件路徑存在問題。
這兩個文件的文件夾結構是這樣的:
- 圖書館
例
在“當前頁”中,我有一個
require_once ('../HTML2PDF/html2pdf.class.php');
但這給了我這個錯誤:
failed to open stream: No such file or directory in
我想念什么?
嘗試
require_once (__DIR__ . '/../HTML2PDF/html2pdf.class.php');
因為它將為您提供當前文件的絕對路徑
您可以在中央配置文件中定義全局應用程序根。 假設您的應用程序根目錄中有config.php
。 然后做一個
define("APP_ROOT", dirname(__FILE__));
您仍然必須包括配置文件,並且必須使用相對路徑,例如
include ("../../../config.php");
但是一旦完成,就可以在腳本中相對於應用程序根目錄進行工作:
include (APP_ROOT."/b.php"); <-- Will always return the correct path
也許您的當前頁面本身被另一個頁面調用(我們稱為page3)。
並且在../HTML2PDF/html2pdf.class.php
中,找不到相對文件路徑../HTML2PDF/html2pdf.class.php
,因為它是當前頁面的相對路徑。
您應該使用文件相對路徑:
require_once (__DIR__ . '/../HTML2PDF/html2pdf.class.php');
要么
require_once (dirname(__FILE__) . '/../HTML2PDF/html2pdf.class.php');
您require
'准備一個顯然包含類定義的文件。 手動“管理”需求對於小型項目來說是一件好事,但是隨着項目的發展以及依賴於某些類在不同文件中可用的編寫代碼,您會發現自己很對不起。 請,請使用自動裝帶器 !
還有一個非常易於使用且方便的功能: spl_autoload_register
, 文檔非常容易理解
您可以在一個文件中(例如在項目根目錄中)創建此自動加載器,並定義一個常量,我們將其稱為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);
}
但這只是一個基本的例子...
您可以在配置文件中設置路徑。
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');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.