LINUX.ORG.RU

[php] Текстовая база - исполняемый код?


0

1

Пишу простенький сайт на локалхосте, типичный блог. Не нужны гиганты вроде wordpress. База будет на обычных текстовых файлах, но чтобы не парсить файл, - сделаю его исполняемым php кодом, который будет include'тся. Знакомы ли вы с такими вариантами баз? Может где можно подсмотреть подобные реализации.

При добавлении новости, комментария - в файл будет записываться экранированный php код, а для их вывода - просто делается include таких файлов, в которых записаны переменные <?php $title = 'blah blah blah'; $content = "; ?>. И переменные просто вставляются в нужные места шаблона...

★★★★★

А потом будешь писать, что хакнули мой крутой сайт. Ты сам понимаешь, какие возможности даешь хакерам?

Лучше воспользоваться базой данных, чем писать такое решето.

papochka ()

но чтобы не парсить файл, - сделаю его исполняемым php кодом, который будет include'тся.

И пхп'ный файл не будет парситься по-вашему?

Не надо изобретать велосипед. Хочется без бд, храните xml'ки или тупо сериализуйте объекты/массивы данных.

Ну а вообще, SQLite это тот же файл

BobiKK ()

Помнится, у меня как-то была гостевуха с комментариями в виде одного файла. И код и база в одном. Самомодифицирующийся код со встроенными данными :) Года два проработала, выросла до пары-тройки мегабайт :D

Но в XXI веке это редкостное извращение. Хотя бы как на UBB когда-то было делать нужно. Строка разделённая на поля — запись. Типа

Заголовок1|^|Текст1|^|Автор1|^|...
Заголовок2|^|Текст2|^|Автор2|^|...


Парсится в пару строк и никакого кода в базе

KRoN73 ★★★★★ ()

Под твою задачу просто идеально подходит sqlite3.

resurtm ★★★ ()

сделаю его исполняемым php кодом, который будет include'тся.

О ужас. Тут уже не какой-то XSS, а полноценное внедрение (хоть и php, но все же) кода наверняка будет в изобилии.

Если хочешь делать без базы на текстовых файлах, то попробуй XML, хотя бы. Смешивать код и данные - очень плохая примета. В случае ошибки (а они есть всегда) ты получишь более критическую ошибку (полный контроль над веб приложением и всеми его данными).

Гораздо лучшим решением будет все же взять SQLite (его база которого лежит в локальном файле). Представь себе, что SQLite это библиотека для работы с текстовыми файлами баз данных, только она из коробки может все что ты когда-либо напишешь в своей системе с php инклудами (нормально будет работать при одновременных запросах из двух php скриптов, например) и даже больше, а кроме того миллионы раз протестирована и не сломает базу, например, при падении приложения.

anonymous ()
Ответ на: комментарий от anonymous

О ужас. Тут уже не какой-то XSS, а полноценное внедрение (хоть и php, но все же) кода наверняка будет в изобилии.

Ну и как тут внедрить? :)

<?php
$h=fopen("php://stdin","r");
$v=rtrim(fgets($h),"\n");
print "<?=unserialize(base64_decode('"
.base64_encode(serialize($v))
."')).\"\\n\";?>\n";
?>

$ echo \'.\`date\` | php a.php | tee /dev/stderr | php
<?=unserialize(base64_decode('czo4OiInLmBkYXRlYCI7'))."\n";?>
'.`date`
Eshkin_kot ★★ ()

Я работал над проектом с текстовой базой. Я делал по другому. Имелись текстовые файлы, а в них строки в определенном формате с разделением секций символом «@». На пример
Заголовок сообщения@Текст сообщения
Заголовок и текст-обычный html. Все забиралось функцией file() и разделялось с помощью explode(), помучался двумерный массив, выводимый в цикле. То есть в данном примере можно в итоге вывести заголовки в цикле for вызовом переменной вида $message[$i][0], где $i-номер строки, а 0-первая ее часть до «@». Главное переводы строки в <br /> перевести не забыть, а то ломаться будет. Как-то так.
А защищал все путем выкладывания файлов базы в отдельную директорию и прописывания для нее в .htaccess deny from all.
Вот мое решение для работы с текстовой базой. Так я сделал даже файл с базой пользователей. А подключаемые пхп файлы будут гемором в плане добавления новых материалов на сайт. Вот.

evilface ★★ ()
23 июня 2012 г.
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.