Yamaliya пишет:Надо бы предусмотреть конвертер туда и обратно.
Согласен. Просто прежде чем говорить о конвертере, необходимо сначала создать новый двиг.
Yamaliya пишет:двумя руками ЗА.
Всё, значит так и будет.
1Bot пишет:тогда в функции сохранения можно использовать любой из этих форматов данных.
Там ещё надо будет предусмотреть правильный разбор формата. Вот рабочие функции по новой базе, черновой вариант, но рабочий, кому интересно. Я не профессиональный программист, а программист-любитель, который любит копаться в чужом коде и старается писать по крайней мере не хуже приличий, так что не пеняйте, если что:
Пример кода (Отобразить)CODE:function read($filename)
{
if (!file_exists($filename))
{
return array();
}
$fp = @fopen($filename,'rb') or die('Could not read from the file <b>'.$filename.'</b>');
flock($fp, LOCK_SH);
$filesize = filesize($filename);
if($filesize<=8)return array();
$filesize =$filesize-8;
fseek($fp,8);
$str = fread($fp,$filesize);
flock($fp, LOCK_UN);
fclose($fp);
$str=eval($str);
if(isset($arr))return $arr;
return array();
}
function write($arr,$path)
{
$tmpName=randTmpName();//чтобы избежать конфликта процессов
$filename=dirname($path).'/'.$tmpName.'.dat';
$fp = fopen($filename,'wb') or die('Could not create the file <b>'.$filename.'</b>');
flock ($fp,LOCK_EX);
$buf='$arr=';
$buf.=var_export($arr, TRUE); $buf.=';';
$len=strlen($buf)+8;
if (fwrite($fp,'<?phpdie;?>'.$buf) === FALSE)
{
sleep(1);//подождём и попробуем ещё раз
if (fwrite($fp,'<?phpdie;?>'.$buf) === FALSE)
exit('Системный сбой при попытке записи во временный файл базы данных!');
}
fflush($fp);
if(filesize($filename)!=$len)exit('Системный сбой при попытке записи во временный файл базы данных!');
$name=basename($path);
unlink($path);
flock ($fp,LOCK_UN);
fclose($fp);
rename($filename, dirname($path).'/'.$name);
return;
}
function randTmpName()
{
$a = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','r','s','t','u','v','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','R','S','T','U','V','X','Y','Z','1','2','3','4','5','6','7','8','9','0');
$p= "";
for($i = 0; $i < 8; $i++)
{
$in = rand(0, count($a) - 1);
$p .= $a[$in];
}
return $p;
}
1Bot пишет:не забывайте, что основной код был написан еще для PHP4 и лишь немного видоизменен для работы с PHP5 на уровне "чтобы не возникало фатальных ошибок
Я прекрасно всё понимаю. Также прекрасно вижу откуда растут ноги многих функций. Первоначальный автор форума, Александр Субханкулов, использовал код IPB форума. И, кстати, правильно делал, ибо зачем городить велосипед если есть хорошие рабочие решения, жизнь-то одна.
Потом, уже после него, форум был изменён, хотя структура осталась практически прежней.
1Bot пишет:Сейчас же есть возможности как раз использовать средства ООП из новых версий PHP7 и по возможности убирать таким образом функциональные повторы в существующем коде.
Так что полный отказ от ООП будет скорее ошибкой.
Этим и занимается, насколько я понял, ув.
WebMaster . Посмотрел код последней версии, там действительно ООП несколько улучшен. Вот эту ветку и следует продолжать делать в том же духе. Это, так сказать, старая песня о главном, и пусть она будет, кому нужно. Мне - нет.. Я хочу иного..
ООП ведь это всего лишь попытка эмулировать модульность, а её можно эмулировать и без ООП, хотя в PHP на это есть определённые ограничения.
1Bot пишет:Каждый модуль вполне себе может быть отдельным сколь угодно сложным объектом, который взаимодействует с классом ядра форума и реализует заданный интерфейс модуля, а также использует все возможности ядра.
Это самое сложное: понять как всё будет функционировать на всех уровнях; каким образом ДОЛЖНО быть устройство модульного движка. Чтобы и безопасность повысить и чтобы он был понятен и прост. Я постоянно об этом думаю. И уже сложилась определённая картина..
1) На самом верхнем уровне находится файл index.php. Это - головной модуль. Через него происходит вся работа. Его задача: инициализировать данные, авторизовать пользователя, провести валидацию имен существующих модулей в системе с именем того модуля, который приходит с запросом пользователя и подключать эти модули. Он ничего не выводит пользователю, а только выполняет эту черновую работу. Валидация имён позволяет легко обеспечить высокую безопасность движка, по принципу: свой - свой. Валидация ключей и значений возлагается на модули верхнего уровня, ибо только они сами знают "своих подопечных".
2) Модули верхнего уровня это: вывод главной страницы, регистрация и пр.
3)Модули нижнего уровня работают через подключение в модулях второго уровня.
Таким образом осуществляется строгая иерархическая система, которая легко понятна. Есть головной модуль, первого уровня, который знает о существовании модулей второго уровня, а модули второго уровня знают о существовании модулей своих подопечных.
В коде всё станет понятней что где и как. Так мне это представляется, и я начал уже потихоньку это осуществлять.