2013-12-16 119 views
0

我正在開發一個PHP項目,並且在require_once中有一個文件路徑問題。PHP項目中的相對路徑

爲2個文件的文件夾結構是這樣的:

- 圖書館

    • 當前頁
  • HTML2PDF
    • 文件,包括

在 「當前頁」 我有一個

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

,但它給了我這個錯誤:

failed to open stream: No such file or directory in 

我錯過了什麼?

+0

添加像require_once中文件的絕對路徑('無功/網絡/ HTML2PDF/HTML2PDF .class.php'); – Sundar

+0

你也可以做類似'require_once(getcwd()。'/ ../HTML2PDF/html2pdf.class.php');'' – Cyclonecode

回答

2

嘗試

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

,因爲它會給你的絕對路徑當前文件

1

也許你的當前頁本身被另一個頁面調用(我們稱之爲第3頁)。

而在頁3中,找不到相對文件路徑../HTML2PDF/html2pdf.class.php,因爲它是當前頁面的相對路徑。

您應該使用文件相對路徑:

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

require_once (dirname(__FILE__) . '/../HTML2PDF/html2pdf.class.php'); 
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); 
} 

但是,這只是一個簡單的例子...

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'); 
2

您可以在中央配置文件中定義全局應用程序根目錄。假設你的應用根目錄中有config.php。然後做一個

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

你仍然必須包括配置文件,你必須使用它的相對路徑,例如,

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

但一旦你這樣做,你可以工作相對於腳本中的應用程序根目錄:

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