Forum Webscript.Ru
Программирование => PHP => Тема начата: Aku Aku от 08 Мая 2004, 13:38:42
-
Нужен скрипт/класс который можно натравить на папку и он проинклудит все ПХП файлы что в ней есть (включая поддиректории), а уж если чего случится, то не завалится а выдасть некий еррор коде. Самому писать сейчас некогда, т.к. это скорее для удобства разработки. Можно ведь как угодно менять структуру папок с классами, добавлять новые классы и не беспокоиться чтобы их еще гдето инклудить. Короче говоря если кто такое встречал, ответьте плиз.
-
Ты мне объясни, зачем тебе такая загогулина кодовая понадобилась...
Вот, примерный код набросал. Не проверял, но должно работать.
//Здесь первый вызов и передача первого каталога в дереве..
include_dir($_SERVER["DOCUMENT_ROOT"]);
//собственно функция
function include_dir($fromname) {
//получаем список файлов,каталогов в текущем каталоге
$d_list = array();
$d = opendir($fromname);
while($f = readdir($d)) {
array_push($d_list,$f);
closedir($d);
//проверяем каждый
foreach($d_list as $f) {
if($f!="." && $f!=".."):
if(is_dir($fromname."/".$f)):
//если дир - то вложенный вызов
include_dir($fromname."/".$f);
else:
//не дир - инклудим
//здесь проверка расширения php - если хочешь...
include($fromname);
endif;
endif;
unset($d_list);
}
P.S.Писал специально неправильные "if:else:endif" для того, чтобы ты в скобках не запутался.
-
принцип как это делать я знаю, твой код кстати не работает даже после добавления закрывающих скобок в циклах. Зачем мне это нужно я ж обьяснил:
Можно ведь как угодно менять структуру папок с классами, добавлять новые классы и не беспокоиться чтобы их еще гдето инклудить.
Меня интересует именно уже написанный класс/скрипт который можно брать и пользовать, в PEAR такого не обнаружил, может еще где есть. Если нет то напишу сам, не стоит мне давать примеры рекурсивных функций :-)
-
Aku Aku:
не стоит мне давать примеры рекурсивных функций :-)
Не буду.
Aku Aku:
Можно ведь как угодно менять структуру папок с классами, добавлять новые классы и не беспокоиться чтобы их еще гдето инклудить.
Их что, ТАК МНОГО?
Aku Aku:
твой код кстати не работает даже после добавления закрывающих скобок в циклах.
Вполне возможно, т.к. я его откромсал от написанного мною скрипта, который писал около года назад. Может и откромсал что лишнее :)
-
Их что, ТАК МНОГО?
около 35 классов, но не в том дело:
не хочется писать внутри каждого класса require_once(все от которых он зависит). Или вот решил поменять структуру папок, или добавил пару классов, и не нужно править путей. Чтобы было понятно, вот как у меня выглядит index.php в проекте:
//session start, ini_set, etc.
require_once("includes/classes/pcof/constants.php");
//beans
require_once("includes/classes/pcof/beans/FormBean.php");
require_once("includes/classes/pcof/beans/Option.php");
require_once("includes/classes/pcof/beans/Field.php");
require_once("includes/classes/pcof/beans/SpawField.php");
require_once("includes/classes/pcof/beans/Element.php");
require_once("includes/classes/pcof/beans/Radio.php");
require_once("includes/classes/pcof/beans/Form.php");
//filter
require_once("includes/classes/pcof/filter/Condition.php");
require_once("includes/classes/pcof/filter/SortingOption.php");
require_once("includes/classes/pcof/filter/FilterDescriptor.php");
require_once("includes/classes/pcof/filter/Filter.php");
require_once("includes/classes/pcof/HttpUtils.php");
require_once("includes/classes/pcof/Error.php");
require_once("includes/classes/pcof/DBError.php");
require_once("includes/classes/smarty/Smarty.class.php");
require_once("includes/classes/pcof/ProjectSmarty.php");
require_once("includes/classes/pcof/AbstractAction.php");
require_once("includes/classes/pcof/ActionDescriptor.php");
require_once("includes/classes/pcof/ModuleDescriptor.php");
require_once("includes/classes/pcof/StaticModuleDescriptor.php");
require_once("includes/classes/pcof/ContainerDescriptor.php");
require_once("includes/classes/pcof/ProfileDescriptor.php");
require_once("includes/classes/pcof/ProjectDescriptor.php");
require_once("includes/classes/pcof/User.php");
require_once("includes/classes/pcof/Container.php");
require_once("includes/classes/pcof/ContainerAssistant.php");
require_once("includes/classes/pcof/ModuleAssistant.php");
require_once("includes/classes/pcof/AbstractModule.php");
require_once("includes/classes/pcof/StaticModule.php");
require_once("includes/classes/pcof/Engine.php");
require_once("includes/classes/pcof/ConfigParser.php");
//Get User
//...
//Get Smarty
//...
//Get DB
//...
//Get config
//...
$engine = new Engine($assistant);
$engine->handleRequest();
//Clean
$db->disconnect();
Я же не говорю, что жить не могу без такого скрипта, просто мне бы было гораздо удобнее с ним :-)
-
Aku Aku
Вообще, такие игры с инклюдами - это не очень хороший стиль программирования.
Неужели тебе нужны ВСЕ библиотеки одновременно?
Инклюдь только необходимое, как это делает, например, Smarty.
И ничего страшного, если "необходимое" будет лежать в двадцати файлах - всяко лучше проинклюдить 20, чем 150 (или сколько их всего).
-
Вообще, такие игры с инклюдами - это не очень хороший стиль программирования.
не вопрос :-)
ессно все не нужны, просто нету времени заморачиваться - все мои классы весят 50кб, так что пущай загружает. Вот проект доделаю, потом и подумаю о производительности (может быть :-))
-
Если ты думаешь, что 50кб - это мало, то ты сильно ошибаешься.
Но дело твоё...
-
FreeSpace:
Если ты думаешь, что 50кб - это мало, то ты сильно ошибаешься
[off] у меня
adodb - около 80кб
HTML_Template_Sigma - около 40кб
+ разные мелкие классы по 5 - 10 кб (мои и pear-вские)
и никаких проблем нет, даже accelerator еще не подключали :)
Хотя конечно я не подключаю все подряд, но килобайт 150-200 на один запрос скрипта наберется [/off]
-
[OFF]150-200 кб - это вполне нормально.
Другое дело, что человек говорит "все мои классы весят 50кб" и приводит листинг с тридцатью инклюдами.
Если оценки не преувеличены, то 50 х 30 = 1500 кб.
И это уже не шутки.[/OFF]
-
[OFF]это они все вместе столько весят :-)[/OFF]
-
А, ну в таком случае эта проблема для тебя неактуальна.
Вот только рекурсивный инклюд директорий мне всё равно не по душе.
Разбей классы на группы по функциональному назначению, для каждой группы заведи отдельный файл .php и положи туда, куда тебе удобно будет. В этом файле иклюдь все классы, которые относятся к этой группе.
Если в скрипте нужно работать с какой-то группой классов, инклюдишь этот групповой файл и всё. Хотя можно такие классы просто в один файл объединить.
Что касается
Aku Aku:
Можно ведь как угодно менять структуру папок с классами, добавлять новые классы и не беспокоиться чтобы их еще гдето инклудить.
, то по-моему проблема надумана. Создай единую структуру директорий с классами и не меняй её. Это не так сложно, на самом деле.
-
Aku Aku:
потом и подумаю о производительности (может быть :-))
никогда ты про нее не подумаешь... если сильно не припечет!
[off]
извини, вопрос не по теме... а ты ядерным реактором управляешь на РНР? Ну шаблонизатор, ну доступ к БД, ну еще что-то, но не столько же 0|0
[/off]
-
никогда ты про нее не подумаешь... если сильно не припечет!
мне кажется эта совершенно отдельная тема, когда и сколько заботиться о производительности. И тут дофига разных факторов.
[OFF]
насчет реактора, честно говоря, не понял. Чего столько? 35 классов общим весом 50кил это много? Или ты о чем то другом?
[/OFF]
-
Aku Aku:
Самому писать сейчас некогда,