ilkz
Новичок
Модули - помогите, plz...
Всем драсть!
Взялся писать механизм работы с модулями для совего движка.
Вот код:
Суть его работы такова. Скрипт лезет в папку $ModDir, в которой хранятся файлы модулей. Далее он подключает каждый файл из этой диры и ищет в нем функцию StartModule. Если в файле такая функция есть, то этот файл считается модулем, если такой функции нет - это не модуль.
При работе этого скрипта апач напрочь падает сначала с ошибкой, а потом с ошибкой переполнения буфера. Глюк - здесь: unregister_tick_function('StartModule');
Я просто неправильно использую эту функцию. НО. Даже если ее убрать - скрипт не работает.
А вот в чем суть его неработы: если ПЕРВЫЙ файл из списка - модуль (в нем есть ф-я StartModule), то ВСЕ ПОСЛЕДУЮЩИЕ тоже он считает модулями. Насколько я понял, происходит это из-за того, что, найдя в первом файле нужную функцию, ПХП сохраняет ее имя где-то у себя в памяти. Тогда, после инклуда следующего файла ПХП ВСЕ РАВНО найдет там стартовую ф-ю (StartModule) - ведь она уже в памяти... Таким образом получается, что все файлы - модули
))).
Теперь об устранении сего глюка - очевидно, что надо после каждой проверки на ф-ю StartModule удалять из памяти ПХП ее имя. Тогда про инклуде следующего файла алгоритм будет работать.
Но вот незадача - я не знаю, можно ли это сделать, и если можно, то как...
Если все понятно и есть какие-то мысли - помогите, плз... Буду очень признателен.
Заранее всем спасибо!
-~{}~ 24.01.05 13:40:
хы, жаль, что ПХП Ассемблер не поддерживает
)) А то бы все решилось довольно просто
))))))))
Всем драсть!
Взялся писать механизм работы с модулями для совего движка.
Вот код:
PHP:
<?
$config_file='confog.php';
require_once($config_file);
//=================================
function LoadModules($Modules_Dir)
{
$Modules_Dir=trim($Modules_Dir);
chdir($Modules_Dir);
$d=@opendir('.');
if(!$d) return false;
while(($e=='.'||$e=='..') continue;
require_once(trim($e));
if(function_exists('StartModule'))
{
unregister_tick_function('StartModule');
echo "<b>$e</b> is a module";
}
else{echo "<b>$e</b> is not a module";}
chdir('..');
return true;
}
//===================================
if(LoadModules($ModDir)){}
else{echo "<b>ERROR:</b>could not load modules";}
?>
При работе этого скрипта апач напрочь падает сначала с ошибкой, а потом с ошибкой переполнения буфера. Глюк - здесь: unregister_tick_function('StartModule');
Я просто неправильно использую эту функцию. НО. Даже если ее убрать - скрипт не работает.
А вот в чем суть его неработы: если ПЕРВЫЙ файл из списка - модуль (в нем есть ф-я StartModule), то ВСЕ ПОСЛЕДУЮЩИЕ тоже он считает модулями. Насколько я понял, происходит это из-за того, что, найдя в первом файле нужную функцию, ПХП сохраняет ее имя где-то у себя в памяти. Тогда, после инклуда следующего файла ПХП ВСЕ РАВНО найдет там стартовую ф-ю (StartModule) - ведь она уже в памяти... Таким образом получается, что все файлы - модули

Теперь об устранении сего глюка - очевидно, что надо после каждой проверки на ф-ю StartModule удалять из памяти ПХП ее имя. Тогда про инклуде следующего файла алгоритм будет работать.
Но вот незадача - я не знаю, можно ли это сделать, и если можно, то как...
Если все понятно и есть какие-то мысли - помогите, плз... Буду очень признателен.
Заранее всем спасибо!
-~{}~ 24.01.05 13:40:
хы, жаль, что ПХП Ассемблер не поддерживает

