Jump to content
  • 0

Как написать портал на файлах


Pavel_html
 Share

Question

Всем привет! Вот мне вздумалось написать портал на php. Решил поискать в инете, а там только описывается как сделать портал на MySQL. А мне надо сделать на файлах. Подскажите как это сделать (ну или линк дайте).

Link to comment
Share on other sites

25 answers to this question

Recommended Posts

  • 0

Имхо, лучше использовать БД...

Очень много мароки с сохранением, сортировкой, доступом к данным...

А если ты будешь использовать, к примеру MySQL или SQLite, то тем самым ты получишь:

- Упорядоченность данных по таблицам(тоже самое как в файлах)

- Легкий доступ к данным... (к примеру чтобы просто найти новость: SELECT * FROM news WHERE id='10' или для того чтобы взять все новости: SELECT * FROM news)

- Сортировка данных "на лету" (пример: SELECT * FROM news ORDER BY date ? сортировка по полю "Дата")

- Выборка из нескольких таблиц одним запросом... Все запросы просты и понятны... Нужен минимум знаний английского чтобы перевести

....

и еще множество преимуществ перед хранением данных в обычных файлах...

Например, я пользуюсь библиотекой DbSimple от DKLab. В ней все очень просто и понятно. Тем более есть возможность пользоваться базами данных разных типов.

Смотри, сейчас хостингов с поддержкой того же банального MySQL куча... Я не вижу смысла работать с файлами, т.к. ты всеравно хочешь ты этого или нет ? будешь выполнять лишнюю работу.

Я сам раньше думал, что SQL это трудно... На самом деле все обстоит гораздо проще, чем ты это себе представляешь...

Link to comment
Share on other sites

  • 0

В общем то MySQL схож по работе с файлами, только конечно же объемнее.

Сравним работу с файлом и с БД. Функцию file( [file name] ) отбросим, т.к. в это всеголишь упрощение доступа к файлу.

Открытие файла для чтения:

$fp = fopen ("file.txt", "r");

Подключение к ДБ:

$db = mysql_connect( [string server [, string username [, string password [, nool new_link [, int client_flags ]]]]]);

now_link и client_flags на данном этапе тебе не понадобяться.

Итак, в случае с файлом мы просто открываем файл для чтения и помещаем ссылку на файл в переменную $fp.

В случае с БД мы проделываем аналогичную операцию, но в переменной $db уже будет не ссылка на файл, а ссылка на Базу Данных, тоесть на множество таблиц с данными...

Файлы...

$file_content = fread($fp, filesize( [file name] )); // Получаем вс? содержимое файла...
$array = split("n", $file_content); // Разбиваем построчно весь файл...

fclose ($fp); // Закрываем файл...

БД...

$query = "SELECT * FROM news LIMIT 10 ORDER BY date"; // Здесь мы определяем "*" ? читать все данные из полей, news ? из таблицы news, LIMIT 10 ? 10 новостей, ORDER BY date ? 10 последних новостей(сортировка по полю "Дата")
$res = mysql_query( $query, $db ); // Посылаем запрос...
$array = mysql_fetch_array($res); // Переводим полученные данные в массив...

mysql_close($db); // Закрываем работу с MySQL

В случае с файлами мы можем всеголишь открыть его, прочитать все данные, потом разбить построчно, потом каждую строку разбить на подстроки(в нашем примере этого нет), чтобы хоть както отделить данные... Конечно же есть функция serialize( mixed value ), которая значительно облегчает хранение и упорядочевание информации в фалах.

В случае с БД мы сформировали запрос на выборку части отсортерованных данных из таблицы news и получаем готовый массив $array, который легко можно вывести на любой странице...

Чтобы начать работу с БД нужно установить локальный сервер, советую пакет Denwer, где уже установлен скрипт работы с Базой Данных MySQL ? phpMyAdmin.

Установив пакет, просто обратитесь по адресу: http://localhost/Tools/phpMyAdmin/

С помощью этой программы-скрипта вы сможете:

а) создать базу данных

б) создать таблицу(ы)

в) наполнить таблицы информацией

Для работы с phpMyAdmin и вообще для работы с MySQL из php вам необходимо прочитать следующие статьи:

1. Основы работы с MySQL в PHP

2. "Работа с MySQL в PHP: с чего начать?"

3. Работа с MySQL в PHP: подробно (PHP, MySQL, веб-программирование)

4. Обучающая статья от ведущего разработчика phpMyAdmin Марка Делисла

5. Работа с MySQL: Подробнее(Как формировать запросы)

Статьи не сильно объемные и не займут много времени, но зато ваш exp значительно возрастет.

Link to comment
Share on other sites

  • 0

Dimitry Wolotko, попробую все привести к виду "статья", а уж потом и в топик... Это был выложен поток мыслей %)

Кстати, я упустил момент безопасности записи данных...

И есть отличное решение безопасности при работе с MySQL в библиотеке DbSimple от DKLab ? placeholder'ы.

Link to comment
Share on other sites

  • 0

Pavel_html, конечно же есть.. сейчас...

вот:

1. Как создать собственную CMS

2. Модульное программирование на PHP или как написать маленький портал.

Думаю, принцип ты поймешь...

А вообще учись пользоваться поиском Google и Yandex... Там зачастую есть все ответы на твои вопросы...

Link to comment
Share on other sites

  • 0

Все! Почитал все что надо. И вот сделал модель движка. Ведь по принцыпу движок работает так?

<?php
function fill_menu(){
global $out, $articles;
foreach(array_keys($articles) as $i){
$out["menu"].="<a href="?action=show&id=$i">";
$out["menu"].=$articles[$i]["title"].'</a>
';
}
}

function e_list(){
global $out;
$out["center"].='<a href="?action=list">Главная</a>
';
$out["center"].='<center><b>Главная страница</b></center>';
}

function e_show(){
global $out, $articles;
$id=$_GET["id"];
$name=$articles[$id]["title"];
$body=$articles[$id]["body"];
$out["center"].='<a href="?action-list"></a>';
$out["center"].="<a href="?action=show&id=$id">$name</a>
";
$out["center"].="<center><b>$name</b></center>";
$out["center"].="<p>$body</p>";
}

$articles=array();
$articles[1]["title"]='Первая статья';
$articles[1]["body"]='Текст первой статьи';
$articles[2]["title"]='Вторая статья';
$articles[2]["body"]='Текст второй статьи';
$articles[3]["title"]='Третья статья';
$articles[3]["body"]='Текст третьей статьи';
$out=array();
$out["title"]='';
$out["menu"]='<center><b>Меню</b></center>';
$out["center"]=' ';
$out["bottom"]=' ';

$tpl=<<<END
<html>
<head>
<title><!-title-></title>
</head>
<body>
<table border="1" bordercolor="#000000" width="100%">
<tr>
<td height="100">Шапка</td>
</tr>
<tr>
<td width="200" valign="top" height="60">
<!-menu->
</td>
<td valign="top" height="60">
<!-center->
</td>
</tr>
<tr>
<td height="30" colspan="2" align="center">
<!-bottom->
</td>
</tr>
</table>
</body>
</html>
END;
if(!isset($_GET["action"])){
$_GET["action"]='list';
}
switch ($_GET["action"]){
case "show":
e_show();
break;
case "list":
e_list();
default;
break;
}
fill_menu();
$ar=array(
"<!-title->"=>$out["title"],
"<!-menu->"=>$out["menu"],
"<!-center->"=>$out["center"],
"<!-bottom->" =>$out["bottom"]
);
print str_replace(array_keys($ar),array_values($ar),$tpl);
?>

Link to comment
Share on other sites

  • 0

А вот простой движок на файлах:

<?php
function fill_menu(){
global $out, $articles;
foreach(array_keys($articles) as $i){
$out["menu"].="<a href="?action=show&id=$i">";
$out["menu"].=$articles[$i]["title"].'</a>
';
}
}

function e_list(){
global $out;
$out["center"].='<a href="?action=list">Главная</a>
';
$out["center"].='<center><b>Главная страница</b></center>';
}

function e_show(){
global $out, $articles;
$id=$_GET["id"];
$name=$articles[$id]["title"];
$body=$articles[$id]["body"];
$out["center"].='<a href="?action-list"></a>';
$out["center"].="<a href="?action=show&id=$id">$name</a>
";
$out["center"].="<center><b>$name</b></center>";
$out["center"].="<p>$body</p>";
}
$txt1=file_get_contents("1.txt");
$txt2=file_get_contents("2.txt");
$txt3=file_get_contents("3.txt");
$articles=array();
$articles[1]["title"]='Первая статья';
$articles[1]["body"]=$txt1;
$articles[2]["title"]='Вторая статья';
$articles[2]["body"]=$txt2;
$articles[3]["title"]='Третья статья';
$articles[3]["body"]=$txt3;
$out=array();
$out["title"]='Наш сайт';
$out["menu"]='<center><b>Меню</b></center>';
$out["center"]=' ';
$out["bottom"]=' ';

$tpl=<<<END
<html>
<head>
<title><!-title-></title>
</head>
<body>
<table border="1" bordercolor="#000000" width="100%">
<tr>
<td height="100">Шапка</td>
</tr>
<tr>
<td width="200" valign="top" height="60">
<!-menu->
</td>
<td valign="top" height="60">
<!-center->
</td>
</tr>
<tr>
<td height="30" colspan="2" align="center">
<!-bottom->
</td>
</tr>
</table>
</body>
</html>
END;
if(!isset($_GET["action"])){
$_GET["action"]='list';
}
switch ($_GET["action"]){
case "show":
e_show();
break;
case "list":
e_list();
default;
break;
}
fill_menu();
$ar=array(
"<!-title->"=>$out["title"],
"<!-menu->"=>$out["menu"],
"<!-center->"=>$out["center"],
"<!-bottom->" =>$out["bottom"]
);
print str_replace(array_keys($ar),array_values($ar),$tpl);
?>

Link to comment
Share on other sites

  • 0

да банально делай экшен вместо слова цифрой. и тогда при его взятии из скрипта используй (int) - все левые нечисловые варианты сведутся к нулю и не понадобится никаких двух функций для фильтра

Link to comment
Share on other sites

  • 0

у тебя action принимает строку в качестве значения. если в алгоритме сделаешь чтоб ему требовалась не строка, а целое число (1,2,3...), то получение значения из строки запроса сведется к $action = ((int)$_GET['action'] > 0) ? (int)$_GET['action'] : null;

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy