Микро-цмс

Статус
В этой теме нельзя размещать новые ответы.

4erepaha13

Полезный
Регистрация
20 Июн 2009
Сообщения
157
Реакции
18
Есть идея для малостраничных сайтов- исходный контент лежит в папке в десятке тхт файлов.
Дизайн и навигация прописана в index.php.
Как реализовать две вещи:
1. По обращению index.php?p=page1 загружается страница page1.txt
2. Исходный текст этой страницы проверяется на совпадение ключевых слов с словами из файла ankor.txt (вида анкор1;Для просмотра ссылки Войди или Зарегистрируйся анкор2;Для просмотра ссылки Войди или Зарегистрируйся) и при наличии делает слово ссылкой.
 
Есть идея для малостраничных сайтов- исходный контент лежит в папке в десятке тхт файлов.
Дизайн и навигация прописана в index.php.
Как реализовать две вещи:
1. По обращению index.php?p=page1 загружается страница page1.txt
2. Исходный текст этой страницы проверяется на совпадение ключевых слов с словами из файла ankor.txt (вида анкор1;Для просмотра ссылки Войди или Зарегистрируйся анкор2;Для просмотра ссылки Войди или Зарегистрируйся) и при наличии делает слово ссылкой.
1. в нужном месте можете поставить echo file_get_contents($_GET['p']);

2. $content = 'buy phentermine';
$ankor = 'phentermine';
$content = preg_replace("/($ankor)/",'<a href="">$1</a>',$content);
echo $content;
 
1. в нужном месте можете поставить echo file_get_contents($_GET['p']);
есть ли чисто секьюрные дыры в таком формате вызова? чтобы злоумышленник не подставлял чтото типа p=...спамный урл или какой другой вредный код

2. $content = 'buy phentermine';
$ankor = 'phentermine';
$content = preg_replace("/($ankor)/",'<a href="">$1</a>',$content);
echo $content;
тут скорее гет-контент присвоить переменной, а потом в цикле по очереди ее опросить на наличие какого либо анкора из исходного списка
 
есть ли чисто секьюрные дыры в таком формате вызова? чтобы злоумышленник не подставлял чтото типа p=...спамный урл или какой другой вредный код
Как вариант можно так:
Код:
$page = (isset($_GET['p']) ? $_GET['p'] : 'index');
$dir = './txt/'; //папка где лежат файлы с контентом
$filename = $dir . $page . '.txt';
if (!preg_match('/^[a-z0-9]+$/i', $page) || !file_exists($filename))
$filename = $dir . '404.txt';
$content = file_get_contents($filename);

P.S. код писал без проверки
 
Главная дыра тут - в $_GET[p].
Чтоб 100% себя обезопасить, делай
PHP:
$page = (int) $_GET[p];
if (!is_file("pages/$page.txt")) $page = 1; // по умолчанию
$str = file_get_contents("pages/$page.txt");
...

Минус этого способа в том, что у тебя файлы должны будут иметь названия 1.txt 2.txt и т.д., т.е. не всегда понятно, какой файл за какую страницу отвечает.

Можно в принципе зайти и с обратной стороны:
PHP:
$pages = array();
$h = opendir('./pages');
while($f = readdir($h)) if ($f[0] != '.') $pages[] = $f;
$page = $_GET[p];
if (!in_array("$page.txt", $pages)) $page = 'index';
$str = file_get_contents("pages/$page.txt");
...

Главное помни - в $_GET[p] может быть '../../../../etc/passwd' в самых немыслимых вариациях (с бекспейсом, нуль-символом, в левой кодировке, с кучей слешей, короче как угодно.. все не отфильтруешь)
 
когда-то делал себе минидвижок, и по-моему если страниц мало (до 100) эффективнее иметь один файл, в котором содержимое страниц - это строки в этом файле, также єто избавляет от описанной venetu проблемы

специально не тестил, но имхо при небольшом кол-ве страниц так должно работать быстрее, чем 1 страница = 1 файл

по такому же принципу посторена CuteNews - бабушка всем известного DLE
 
Один исходный файл, распарсенный на странички - этот метод в зебрум лайт, не зря они его так. Технически ничего не мешает перед заливкой множество текстовиков обьединять в один файл перед заливкой.
Правда тогда поменяется логика создания навигации (до этого думал через класс dir генерировать менюшку).
Зайду с самого начала:
до сотни текстов с нч-сч запросами в названии, которые автоматом по совпадениям из этих текстов на соответствующие страницы будут линковаться.
Как добавил пару новых текстов- на них по их запросам сразу же ссылки проставились, и из них на существующие страницы- соответственно.
Фактически зебрум и почти удовлетворяет, кроме перелинковки по анкорам, потому и затеял самописку.
 
Если общий размер файла - до пяти мегабайт, то и проще, и быстрее весь контент держать в одном файле. Я специально тестил.

Да, у нас фактически при каждом обращении к сайту в память ложится ВЕСЬ его контент, да еще и не один раз :) Но по тестам это оказывается намного быстрее, чем тянуть из базы. Такие вот пироги..

Если размер файла больше 5 метров - то все равно работает, просто на таких объемах скорость уже становится сравнима с wordpress. А примерно начиная с 15 мегов все валится с Memory Allocation Error (если самому вручную не увеличивать память в php.ini, но я предполагаю все для стандартных настроек хостинга). 15 мегов контента, у вас много таких сайтов?
 
Есть готовое решение CMS Rumba XML. Все страницы в одном xml файле, либо тайтлы в xml, а тексты в отдельных файлах в каталоге /bigtext.

И перелинковку такую поддерживает. Редактируете файл listlinks.txt и все.
 
да, румба подоходит для этой цели, плюс есть возможность создания хтмл копии сайта для народа и прочих хостингов
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху