2011-12-19 2 views
1

Я прошел через сайт по этой теме, но я все еще смущен. Я исправил свою проблему, но я знаю, что в глубине души меня обманывают, и это исправление, которое может вызвать у меня проблемы в будущем. Позвольте мне объяснить, где я:set_include_path() Может кто-то меня установить прямо

Вот структуру каталогов папки, как это >> [имя папки]:

/site root 
[ajax-loads] 
    showorder.php 

[bcls] << For bespoke classes 
    class.order.php 

[cls] << For classes 
    class.main.php 
    class.db.php 
    class.sql.php 
    ... 
    ... 

dashboard.php 
index.php 
config.php 

... 
.. etc etc 

Так выше я показываю у меня есть 2 папки, которые содержат классы для меня, чтобы использовать из которых большинство вызывается через __autoload в классе.main.php. Проблема, с которой я столкнулась, заключается в том, что я использую jQuery для добавления нового контента в load() в div; изменения поведения и путь к автоматической загрузке относятся к файлу ajax-load, а не к классу.main.php. На данный момент у меня есть следующий код, где я чувствую, что обманул, так сказать.

//PATHS & AUTOLOAD 
set_include_path("./cls"); 
set_include_path("../cls"); 
set_include_path("./bcls"); 
set_include_path("../bcls"); 
//INVESTIGATE THIS NONESENSE ABOVE! 

function __autoload($class_name) 
{ 
    require_once 'class' . '.' . $class_name . '.' . 'php'; 
} 

Ранее в файле я с той же проблемы с моим файлом config.php, который я темп закрепленную:

set_include_path("./"); 
set_include_path("../"); 

Теперь позвольте мне отметить, что это мой первый большой проект, решив чтобы уйти от процедурного кодирования, и это мой первый реальный опыт работы с автозагрузкой. Вместо того, чтобы быть копирующим кодером, мне действительно нужно понять это лучше; Я ощущаю разрыв в своем понимании. Как и исправляемый код, кто-то любезно объяснит, что делает правильный код, поскольку я пробовал несколько «решений», но я все еще получаю странные результаты после подражания примерам других людей.

Любовь и поцелуи Энди

+0

Я попытался перемещать вещи, поэтому я вызываю config.php, а затем все происходит оттуда. Я думал, что было бы лучше инициализировать вещи из файла, который находится в корне, но я все равно получаю ту же проблему; загрузка ajax не будет искать файл по отношению к корневому каталогу относительно папки ajax-load, даже если команда require_once находится в файле config.php, который сидит в корне и работает во всех других ситуациях. –

ответ

0

Если вы действительно хотите изменить включать путь, то вы должны использовать его как:

define('BASE_PATH', $_SERVER['DOCUMENT_ROOT']); 

// ... 

set_include_path(
    BASE_PATH . '/bcls' . 
    PATH_SEPARATOR . BASE_PATH . '/cls' . 
    PATH_SEPARATOR . get_include_path() . 
    PATH_SEPARATOR . '.' 
); 

Хотя, я бы рекомендовал переименовать папки. Настоятельно не рекомендуется сокращать переменные, классы, функции, папки и т. Д. Вы рассматривали использование какой-либо структуры PHP? Это может помочь вам в ваших усилиях, и вы можете избежать повторного использования колеса.

Если вы хотите иметь легкий вес, подумайте об использовании Kohana или CodeIgniter. В противном случае я рекомендую Zend Framework.

+0

Это скорее обучение Я играл с CodeIgniter раньше, но хотел бы перейти на сцену, где я мог бы построить свою собственную фреймовую работу (теоретически) для лучшего понимания. –

+0

Я действительно не понимаю, что вы там разместили, и у меня все еще возникает проблема с вызовом моего конфигурационного файла в корне с сообщением: Предупреждение: require_once (config.php) [function.require-once]: failed для открытия потока: нет такого файла или каталога в G: \ www \ MiX \ cls \ class.main.php в строке 14 Неустранимая ошибка: require_once() [function.require]: Не удалось открыть требуемый 'config.php' (include_path = 'G:/www/G:/www // bcls; G:/www // cls;.; C: \ php5 \ pear ;.') в G: \ www \ MiX \ cls \ class.main. php в строке 14 –

Смежные вопросы