Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Новостная лента на файлах, Теоретический вопрос. 
:(
    Опции темы
Osrus
Дата 15.2.2007, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 443
Регистрация: 4.12.2004

Репутация: нет
Всего: 3



Есть новостная лента (PHP), все новости пишутся в один текстовый файл, который является базой. На главной странице выводятся только, предположим, 10 сообщений.
Представим, что файл достигает размера, к примеру, 50 мб. Будет ли сервер обрабатывть запрос дольше? Меня интересует, как работает PHP  с файлами в принципе - обрабатывает весь массив файла, а потом выводит, указанные 10 или же обращается к конкретной части файла. 


Это сообщение отредактировал(а) Osrus - 15.2.2007, 00:57


--------------------
Шагнул на скользкий путь красноглазия...
Long live Socialism!
PM MAIL ICQ   Вверх
Mal Hack
Дата 15.2.2007, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Смотря как работать. Стандартными функциями - весь файл грузится в память, если через потоки, то можно частями. Сам не пробовал
PM ICQ   Вверх
pento
Дата 15.2.2007, 06:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 14.1.2007
Где: Россия

Репутация: нет
Всего: 4



Osrus, SQLite?
PM MAIL   Вверх
Всемогущий
Дата 15.2.2007, 07:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 25.6.2006
Где: Челябинск

Репутация: 5
Всего: 13



Osrus
скажи пожалуйста ,какими функциями для чтения файла ты пользуешься ,и я скажу
Цитата(Osrus @  15.2.2007,  02:56 Найти цитируемый пост)
как работает PHP  с файлами





--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
Gold Dragon
Дата 15.2.2007, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



по моему, если делать новостную ленту на файлах, то лучше новости делить на разные файлы - по дням, неделям, месяцам, в зависимости от количества новостей. Или как вариант по количеству новостей.

И поиск будет удобный, да и не стоит заморачиваться о нагрузке на сервер.


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Osrus
Дата 15.2.2007, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 443
Регистрация: 4.12.2004

Репутация: нет
Всего: 3



Всемогущий
Если никто не против, я приведу полностью код:  
Код

<?php

include("config.inc");

echo "";   

function cuttext($stre,$no_of_words) { 

        $str_array = split(" ",$stre,$no_of_words+1);      

        if(count($str_array)>$no_of_words) {               

                for($q=0; $q < $no_of_words; $q++) {       

                        print $str_array[$q]." "; } 
                              

                print "...";}       

        else {                                     

                print $stre; }    

                } 

function replace ($string)

        {

        global $exech;

        global $smile;

        $string = " ".$string;

        $string = eregi_replace ('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)', '\\1<a href="http://\\2" target="_blank">\\2</a>', $string);

        $string = eregi_replace ('([[:space:]()[{}])(http://.[-a-zA-Z0-9@:%_\+.~#?&//=]+)', '\\1<a href="\\2" target="_blank">\\2</a>', $string);

        $string = eregi_replace ("[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*","<a href=\"mailto:\\0\">\\0</a>", $string);

        if ($smile == 1){

        $autochange = file ($exech);

        $lines = count ($autochange);

        for($e=0;$e<$lines;$e++)

                {

                list($change1,$change2)=explode("|", $autochange[$e]);

                $string = eregi_replace("$change1","$change2",$string);

                }

        }

        return trim($string);

        }



$file_array=file("$all_file");

$lines = count($file_array);



if (!isset($page)) { $page = 1; }



function getPages($total, $page, $link, $perpage)

        {

        $mpp = $perpage;

        $prev_page = $page - 1;

        $next_page = $page + 1;

        if ($total <= $mpp) $pages = 1;

        elseif($total % $mpp == 0) $pages = $total / $mpp;

        else $pages = $total / $mpp + 1;

        $pages = (int) $pages;

        $s_pages    = $page<7 ? 1 : floor($page / 7) * 7;

        $e_pages    = $page + 6;

        if ($e_pages > $pages) { $e_pages = $pages; }

        $s = "";

        if ($pages > 6){

        if($prev_page != 0) { $s = "<a href=\"".$link."page=1\">&lt;&lt;</a>|"; }

        if($prev_page) { $s .= "<a href=\"".$link."page=$prev_page\">&lt;</a>|"; }}

        for($i=$s_pages;$i<=$e_pages;$i++)

                {

                if ($i != $page) { $s .= "<a href=\"".$link."page=$i\" class=a2>$i</a>|"; }

                elseif ($i != 1) { $s .= "<b>$i</b>|"; }

                elseif ($page != $pages) { $s .= "<b>1</b>|"; }

                }

        if($page != $pages && $pages > 6)

                {

                $s .= "<a href=\"".$link."page=$next_page\">&gt;</a>|";

                $s .= "<a href=\"".$link."page=$pages\">&gt;&gt;</a>|";

                }

        if (!isset($s) || $s == "") { $s = "<b>1</b>|"; }

        return $s;

        }

$print_pages = getPages($lines, $page, "$PHP_SELF?", $maxmess);



$from = $lines - ($page * $maxmess - 1);

$to = $lines - (($page - 1) * $maxmess);

if($from <= 0) { $from = 1; }



for($i = $to - 1; $i >= $from - 1; $i--)

        {

 list($add_date,$nick,$name_news,$linw,$mes)=explode("|||", $file_array[$i]);

$num = $i + 1;

$mes = replace($mes);

        list($timesq,$datesq)=split("_",$add_date);

        $add_date=$timesq.",".$datesq;

echo "
<table width=100% border=0 align=center cellpadding=0 cellspacing=0>
        <tr>
          <th width=25 height=46 scope=row bgcolor=#F4D187><img src=des/1.gif width=25 height=46 hspace=0 vspace=0 align=left /></th>
          <td height=46 align=center bgcolor=#F4D187></td>
          <td width=25 align=center  bgcolor=#F4D187><img src=des/2.gif width=25 height=46 hspace=0 vspace=0 border= align=right /></td>
        </tr>
        <tr>
          <th  scope=row bgcolor=#F4D187></th>
          <td align=center valign=middle bgcolor=#FFFFFF><table width=100% height= border=0 align=center cellpadding=0 cellspacing=0>
              <tr>
                <th width=10 height=10 scope=row background=des/22.gif></th>
                <td align=center style=background-color:#FFFFFF></td>
                <td width=10 background=des/33.gif></td>
              </tr>
              <tr>
                <th scope=row bgcolor=#FFFFFF></th>
                <td style=background-color:#FFFFFF align=left>$name_news $add_date<br><br> $mes <br><br><a href=comments.php?c=$add_date>Комментарии
</a> </td>
                <td style=background-color:#FFFFFF></td>
              </tr>
              <tr>
                <th height=10 width=10 scope=row background=des/11.gif></th>
                <td align=center style=background-color:#FFFFFF></td>
                <td background=des/44.gif></td>
              </tr>
          </table></td>
          <td width=25 align=right valign=bottom bgcolor=#F4D187>&nbsp;</td>
        </tr>
        <tr>
          <th   height=46 bgcolor=#F4D187 scope=row><img src=des/3.gif width=25 height=46 hspace=0 vspace=0 border=0 align=left /></th>
          <td height=46 align=center valign=middle  bgcolor=#F4D187></td>
          <td width=25 align=center bgcolor=#F4D187><img src=des/4.gif width=25 height=46 hspace=0 vspace=0 border=0 align=right /></td>
        </tr>
      </table><br>";

$linw = trim($linw);

if ($linw != "нет"){

echo " <span><b></b> <a href=$link target=_blank><span>$linw</a></span><br><br>";

}else{echo "<br>";}

$fc="comments/".$add_date.".txt";

if (file_exists($fc)){

$commen = count(file($fc));

echo "<font color=F3BA43>$commen</font>";

}


}

if($lines/$maxmess > 1){  

echo "<b><p align=left>Страницы :</b> |$print_pages</b></p><p><b>Всего новостей: $lines</b></p>";

}else{echo "";}

echo "";


?>


Если нетрудно, расскажите про эту функцию - function cuttext


--------------------
Шагнул на скользкий путь красноглазия...
Long live Socialism!
PM MAIL ICQ   Вверх
mishaSL
Дата 15.2.2007, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 19
Всего: 54



Цитата(Osrus @  15.2.2007,  11:29 Найти цитируемый пост)
Если нетрудно, расскажите про эту функцию - function cuttext 


Osrus, извини но это твоя функция. А если ты взял чей-то код и не можешь понять по воспользуйся пожалуйста сначало мануалом. 
Для начала:
http://ru.php.net/file
http://ru.php.net/split


Теперь по вопросу размера файла и твоего кода:
Если сервер не твой, т.е. ты покупаешь виртуальный хостинг. Обычно стоит ограничение на использование памяти  от 2 до 10 мегабайт. Функция file как уже сказал Mal Hack загружает весь файл в память. Так что смотри сам на сколько может быть большой файл. Разбивай новости на несколько файлов, а еще лучше используй какую-нибудь БД, если это возможно.



--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
Osrus
Дата 15.2.2007, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 443
Регистрация: 4.12.2004

Репутация: нет
Всего: 3



mishaSL, Спасибо.


--------------------
Шагнул на скользкий путь красноглазия...
Long live Socialism!
PM MAIL ICQ   Вверх
Osrus
Дата 16.2.2007, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 443
Регистрация: 4.12.2004

Репутация: нет
Всего: 3




mishaSL,  Сп.. еще раз. А в случае, если для каждой отдельной новости создается
только один файл? По дате, например... т.е. дата(и время) становится именем файла.



--------------------
Шагнул на скользкий путь красноглазия...
Long live Socialism!
PM MAIL ICQ   Вверх
mishaSL
Дата 16.2.2007, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 19
Всего: 54



Osrus, можно и так. Ты только скажи почему ты так настойчиво не хочешь использовать БД? smile 


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
Osrus
Дата 16.2.2007, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 443
Регистрация: 4.12.2004

Репутация: нет
Всего: 3



mishaSL, Открываю секрет... smile 
Я  не программист... знаю лишь HTML и КСС... но, изучая разные движки, остановился на одном, а именно SM news v 2. Кстати, автора движка, скорее всего, знает Mal Hack - так, на заметку... Так вот - движок мне этот полюбился тем, что в нем легко изменить дизайн. А с файлами, лично мне кажется, проще работать, да и Mysql я не знаю почти. Основной принцип, конечно, понятен... 
Конечно можно было бы поставить портальную систему, но там много функций, которые для моего сайта просто не нужны, да и дизайн изменять как-то мутороно.
Может быть,  я не прав, а может, просто много не знаю...
В чем, в принципе, + работы с БД? 

Это сообщение отредактировал(а) Osrus - 16.2.2007, 22:59


--------------------
Шагнул на скользкий путь красноглазия...
Long live Socialism!
PM MAIL ICQ   Вверх
Serkys
Дата 16.2.2007, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1061
Регистрация: 19.4.2004

Репутация: 4
Всего: 22



Цитата(Osrus @  16.2.2007,  23:57 Найти цитируемый пост)
В чем, в принципе, + работы с БД? 

В первую очередь удобство и скорость.
До бесконечности можно перечислять.
PM MAIL   Вверх
Osrus
  Дата 17.2.2007, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 443
Регистрация: 4.12.2004

Репутация: нет
Всего: 3



Только что потрошил sPaize-nuke... ладно, признаю - работает быстро... в принципе, и дизайн редактируется в Дриме довольно быстро. Но рыться в чужой верстке не очень по нраву. И функционально... это бд... Убедили, может, перетащу все на движок с БД.
Видимо, упрямство мешало...

А что про безопасность скажете? Если сравнить, к примеру, тот же php-nuke на Mysql
и модель сайта на файлах (к примеру, новостная лента с возможностью комментирования).


Это сообщение отредактировал(а) Osrus - 17.2.2007, 00:54


--------------------
Шагнул на скользкий путь красноглазия...
Long live Socialism!
PM MAIL ICQ   Вверх
mishaSL
Дата 17.2.2007, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 19
Всего: 54



Цитата(Osrus @  17.2.2007,  00:52 Найти цитируемый пост)
А что про безопасность скажете? Если сравнить, к примеру, тот же php-nuke на Mysql
и модель сайта на файлах (к примеру, новостная лента с возможностью комментирования).


Безопасность будет зависить от самой реализации.


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1314 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.