База данных в текстовом файле

  • Автор темы shurikz
  • Дата начала

shurikz

Guest
База данных в текстовом файле

Подскажите пожалуйста кто-нибудь!
Можно ли сделать базу данных в текстовом файле (просто за
MySql на моем хостинге надо платить) таким образом:
в текстовом файле (например, base.txt) каждая строка сопоставляется имени файла с контентом,
(скажем, name.html), а в этой строке записаны например title, дата, еще что-нибудь?
Т.е. когда пишешь такой например адрес:
http://myserver.ru/index.php?content=name
и в результате выводится файл, сделанный по шаблону (Например Е.Кучерова)
с контентом, взятым из файла name.html, а переменные $title и др., берутся
из строки файла base.txt, соответствующей файлу name.html.
Извините, если спорол какую-нибудь чушь, PHP я только начал изучать.
 

Fobos

Guest
Это совершенно нормальная и стандартная альтернатива хранению информации в базе данных. Так делать конечно же можно, тем более что РНР обладает довольно мощными инструментами для работы с файлами.
Единственное, что в зависимости от типа данных, это может оказаться не лучшей альтернативой. Но для начинающего, я считаю, стоит обязательно поработать с файлами в РНР.
И если ты посмотришь на скрипты, доступные в инете, то увидишь, что многие для хранения данных гостевых книг, лент новостей, форумов(?) и т.д. предпочитают именно файлы в силу простоты работы с ними и отсутствия дополнительных затрат.
 

shurikz

Guest
А нельзя для примера увидеть такой файл
как именно там всё построено? И каким образом
читать из него данные?
 

Query

Guest
Там построено на разделителях (";" или "|" или еще чего-нибудь). Для примера открой Эксель. Слепи какую-нибудь таблицу и потом сохрани в формате .csv.. затем открой файлик блокнотом - вот тебе текстовая база данных.
 

ErrN0

Guest
как альтернативу можно попробовать XML
 

shurikz

Guest
А все-таки, хотелось бы увидеть какой-нибудь
конкретный рабочий файл текстовой БД. И повторюсь,
как из него прочитать данные?
 

Venom

Guest
Тривиальнейший пример:

File content "base.txt":
id|by|file|type
0|Venom|statja.htm|Statja
1|Other|manual.htm|Manual
....

esli zaprashivajetsa ID:
{
$base=@file("base.txt");
//zakachivajem soderzhimoje v massiv, gde kazhdij elemnt - stroka faila
//prohodimsja postro4no
foreach($line in $base)
{
//razbivajem stroku na massiv, soderzhashije elementi stroki, razdelennije "|"
$line=explode('|',$line);
//esli ID najden
if (strtolower($line[0])==strtolower($ID)')
{
echo '<p>'.$line[3].' by '.$line[1].'</p>';
@include($line[2]);
}
}
}
 

Кай

Guest
А насчет того, что за MySQL надо платить, так есть бесплатный хостинг этой бд: http://freesql.org
 

shurikz

Guest
Venom, спасибо, смысл я понял. Но вот с реализацией у меня проблемы.
Выдает такую ошибку:
Parse error: parse error, unexpected T_STRING in d:\home\php\www\index.php on line 90

Line 90 - это foreach($line in $base)
Скорее всего я просто неправильно вписал этот код в index.php.
Это я пробовал обычную страничку, но может кто-нибудь подскажет,
как его вписать сразу в шаблон. Это файл index.php (Е.Кучерова,
я такое не умею):

<?
require_once "class.Template.php";
$tpl = new Template("./templates");
$tpl->load("main,styles,counters,banner.top,menu.vert");

$title = "Здесь элемент из БД";
$caption = "Здесь другой элемент из БД из той же строки";
$element = "Здесь третий элемент из БД из той же строки";

ob_start();

include "$id.html";

$content = ob_get_contents();
ob_end_clean();
eval("\$menu_vert = \"".$tpl->get("menu.vert")."\";");
eval("\$banner_top = \"".$tpl->get("banner.top")."\";");
eval("\$counters = \"".$tpl->get("counters")."\";");
eval("\$styles = \"".$tpl->get("styles")."\";");

eval("print \"".$tpl->get("main")."\";");
?>

Подскажите пожалуйста, как правильно вписать сюда код?
 

Venom

Guest
Блин, муть.
Может ты просто после foreach на поставил { ?
T_STRING - указание на то, что где-то в коде появился непонятный текст, например забыл поставить $ перед названием переменной или что-то в этом роде.
А тот код, что ты написал - отнюдь не для новичков (хотя бы потому, что там составляестя текст, который потом пробразуется в комманды php).
 

shurikz

Guest
Простите меня пожалуйста за мою тупость, опять эту ошибку
на этой строке выдает. Вот простой файл index.php, где
я просто вставил твой код для проверки БД:

<html>
<body>
<?php
if ($id=="") {
include ("1.txt");
}
else {
$base=@file("base.txt");
foreach($line in $base)
{
$line=explode('|',$line);
if (strtolower($line[0])==strtolower($id)')
{
echo '<p>'.$line[3].' by '.$line[1].'</p>';
@include($line[2]);
}
}
}
?>
</body>
</html>

Я не сомневаюсь, что сделал это неправильно, но как надо?
 

Venom

Guest
strtolower($id)') = strtolower($id)) без апострофа между скобами
sorry
 

shurikz

Guest
Ура! Заработало!
Убрал апостроф, ничего не дало. Потом полез в
документацию, нашел что пишется
foreach($line as $base) - не in а as
После этого поменял $line и $base местами, т.е.
foreach($base as $line)
И заработало!
Всем спасибо, отдельное огромное спасибо Venom-у!
А с шаблоном я все-таки разберусь, очень уж заманчиво
их использовать.
Кстати, никто не в курсе почему PHP в деталях не работают?
 

Venom

Guest
Sorry - отголоски VisualBasic-a (сдаю экзамены по нему)
Foreach x in a do
'VB code
next x
 

shurikz

Guest
Вопрос вдогонку (а то я что-то рано обрадовался): как сделать, чтобы при запуске index.php без параметов,
по умолчанию брались значения из первой строки
текстовой БД? Я попробовал просто вместо $id подставить "0", но наверное можно сделать как-то мудрее?
 

RomikChef

Guest
а ты не мудри.
Делать надо не мудрее, а наоборот - проще.
 
Сверху