2013-12-16 5 views
0

Я работаю над проектом PHP, и у меня есть проблема с файловым путем в require_once.Относительный путь в проекте PHP

Структура папок для 2-х файлов заключается в следующем:

- Библиотека

  • Пример

    • CurrentPage
  • HTML2PDF
    • файл включить

в "CurrentPage" У меня есть

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

, но это дает мне эту ошибку:

failed to open stream: No such file or directory in 

Что мне не хватает?

+0

добавить свой абсолютный путь к файлу, как require_once ('вар/WWW/HTML2PDF/html2pdf .class.php '); – Sundar

+0

вы также можете сделать что-то вроде 'require_once (getcwd(). '/ ../HTML2PDF/html2pdf.class.php'); '' – Cyclonecode

ответ

2

попробовать

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

, как это даст вам абсолютный путь для текущего файла

1

Может быть, ваш CurrentPage сама называется другой странице (назовем его PAGE3).

И на стр. 3 относительный путь к файлу ../HTML2PDF/html2pdf.class.php не найден, так как это относительный путь для текущей страницы.

Вы должны использовать относительные пути файлов:

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

или

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

Но это всего лишь простой пример ...

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 
Смежные вопросы