Вывод данных из .txt

Discussion in 'PHP' started by alpotemkin, 7 Dec 2009.

  1. alpotemkin

    alpotemkin Elder - Старейшина

    Joined:
    7 May 2008
    Messages:
    57
    Likes Received:
    1
    Reputations:
    0
    Доброго времени суток!

    Описание: Имеется сайт, на котором добавляются и выводятся новости с использованием текстовых файлов.
    Каждая новость добавляется в отдельный файл.
    Скрипт добавления:

    Code:
    <?php
    $name='Название новости: '. $_POST['name'];
    $news='Новость'. $_POST['news'];
    
    $date=date("d.m.Y-G.i.s");
    
    $handle = fopen("news$date.txt", "w+");
    
    fwrite($handle, $name_prj."\r\n");
    fwrite($handle, $news."\r\n");
    
    $URL="...куда перейти после добавления";
    header ("Location: $URL");
    
    fclose($handle);
      
    ?>
    Раньше текстовые файлы просто сливались на комп и постились выборочно. Теперь же требуется, чтобы скрипт постил все новости.
    Скрипт вывода из одного файла:
    Code:
    <?php
    
    echo "<table>";
    $file = file("news.txt");
    
      foreach($file as $qk)
     { 
    
      list($text1,$text2) = explode("=", $qk); 
    
    echo "<tr><td>".$text1."</td></tr>";
    }      
    
    echo "</table>";
    ?>
    Задача: Хотелось бы, чтобы скрипт сканировал папку с файлами и выводил все новости постранично (к примеру, по 10) по убыванию даты постинга.

    Извиняюсь, если сумбурно объяснил ситуацию. Если где-то есть подобная тема - просьба скинуть ее сюда.

    Заранее спасибо за ответ.
     
  2. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,177
    Likes Received:
    1,156
    Reputations:
    202
    Когда новостей не много, то просканировать папку (scandir), реверснуть файлы(arsort) и вывести еще можно, но когда новостей будет ого-го то либо будут проблемы с оперативкой, либо с скоростью работы. Вообщем советую накатать скриптик который загонит твои новости в БД. Оттуда же и постраничную навигацию несложно сделать, вот как раз обсуждали http://forum.antichat.ru/thread161677.html
     
  3. alpotemkin

    alpotemkin Elder - Старейшина

    Joined:
    7 May 2008
    Messages:
    57
    Likes Received:
    1
    Reputations:
    0
    Хм... может и так.... Тем более, что у меня уже написан скрипт для этого... а скрипт постинга можно быстро переписать.
    Спасибо за ссылку, немного не то, но некоторые моменты использую. :)
     
    #3 alpotemkin, 8 Dec 2009
    Last edited: 10 Dec 2009
  4. Vlad&slav

    Vlad&slav Member

    Joined:
    1 Jan 2009
    Messages:
    207
    Likes Received:
    41
    Reputations:
    9
    #4 Vlad&slav, 8 Dec 2009
    Last edited: 8 Dec 2009
  5. alpotemkin

    alpotemkin Elder - Старейшина

    Joined:
    7 May 2008
    Messages:
    57
    Likes Received:
    1
    Reputations:
    0
    Новостей особо немного, раз в две недели-месяц добавляются. Потому я просто не вижу смысла использовать БД - сервер грузить не будет.

    Насчет скандира и арсорта... не понимаю, как их можно прикрутить к readfile()? Сходу только одно приходит в голову:

    Code:
    <?php
    
    $dir='/news/';
    $files=scandir($dir);
    
    print_r($files);
    
    ?>
    Но это только выводит список файлов, а не их содержимое... А если заменить print на readfile, то не работает.
    А надо, чтобы скрипт просканировал папку с текстами и вывел их содержимое на сайт, по 10 на страницу.
     
    #5 alpotemkin, 10 Dec 2009
    Last edited: 10 Dec 2009
  6. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,177
    Likes Received:
    1,156
    Reputations:
    202
    Ну так)) Список файлов в массиве, далее в цикле открываеш первых 10 файлов из массива, и выводиш на страничку, если страничка $page=2 то делаеш условие что вывод в цикле начинается с ключа [10] и заканчивается [20] елементарно =)
     
  7. alpotemkin

    alpotemkin Elder - Старейшина

    Joined:
    7 May 2008
    Messages:
    57
    Likes Received:
    1
    Reputations:
    0
    Возможно и элементарно, но я еще только учусь... Если не сложно, можете выложить пример такого скрипта?
     
  8. Vlad&slav

    Vlad&slav Member

    Joined:
    1 Jan 2009
    Messages:
    207
    Likes Received:
    41
    Reputations:
    9
    И мне)
     
  9. LStr1ke

    LStr1ke Elder - Старейшина

    Joined:
    29 Jul 2009
    Messages:
    801
    Likes Received:
    145
    Reputations:
    73
    Тестил на Win не уверен как на юниксах будет вести себя
    PHP:
    <?php
    $path 
    "news"//Директория с файлами
    $dir=getcwd()."/".$path//Получаем абсолютную директорию

    $files=scandir($dir); //Получаем список файлов

    // Тут смотри сам, я удалил из списка .. и . и сортировал, смотри сам как тебе нужно будет
    unset($files[0],$files[1]);
    sort($files);
    //----

    chdir($path); //Переходи в папку с файлами для чтения

    $page intval($_GET['page']); // Тут берем тек. страницу
    $onpage 5//Количество вывода на страницу
    $start $page $onpage//Высчитываем с какого числа начинать чтение файлов

    for($i=$start;$i<$start+$onpage;$i++) 
    {
    // Вывод
        
    if($i count($files))
        {
            echo 
    "<p>";
            
    $file file($files[$i]);
            foreach(
    $file as $qk)
            { 
                list(
    $text1,$text2) = explode("="$qk); 
                echo 
    "<b>".$text1."</b><br><small>".$text2."</small>";
            }      
            echo 
    "</p>";
        }
    }
    // Выводим навигацию
    $cnts count($files)/$onpage// Определяем количество ссылок
    for($i=1;$i<$cnts;$i++) echo "<a href='".$_SERVER['PHP_SELFT']."?page=".$i."'>".$i."</a> "

    ?>
     
    2 people like this.
  10. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,177
    Likes Received:
    1,156
    Reputations:
    202
    [​IMG]

    [+] Проверяет тип файл или папка:
    [+] Проверяет что в адресную строку не вводиди всякую херь типа ?p=-100 иди ?p=a
    PHP:
    if(empty($_GET['p']) || $_GET['p'] < || $_GET['p'] > $COUNT_PAGES || !intval($_GET['p']))
    $_GET['p'] = 0;
    PHP:
    <?php
    if ($handle opendir('./files')) {
        while (
    false !== ($file readdir($handle))) {
            if (
    $file != "." && $file != "..") {
                
    $files[] = $file;
            }
        }
        
    closedir($handle);
    }
    /* config */
    $COUNT_FILES_ON_PAGE 7;
    ###
    $COUNT_FIELES count($files);
    $COUNT_PAGES intval($COUNT_FIELES $COUNT_FILES_ON_PAGE);
    if(empty(
    $_GET['p']) || $_GET['p'] < || $_GET['p'] > $COUNT_PAGES || !intval($_GET['p']))
    $_GET['p'] = 0;


    echo 
    '<h2>Файлов в папке: '.$COUNT_FIELES.'</h2>';
    echo 
    'Всего страниц: <b>'.($COUNT_PAGES +1).'</b><br>';
    echo 
    'Файлов на страницу: <b>'.$COUNT_FILES_ON_PAGE.'</b><br>';;
    echo 
    'Текущая страница: <b>'.($_GET['p']+1).'</b><br>';

    for (
    $i=0$i<= $COUNT_PAGES;$i++) {
    echo 
    '<a href="?p='.$i.'">['.($i+1).']</a> ';
    }
    echo 
    '<hr>';

    $START $_GET['p'] * $COUNT_FILES_ON_PAGE;
    $END $START $COUNT_FILES_ON_PAGE;

    for (
    $i $START$i $END$i++) {
        
    if(
    key_exists($i,$files)) {
    if(
    is_file('./files/'.$files[$i]))
    echo 
    $files[$i].' - [FILE]<br>';
    if(
    is_dir('./files/'.$files[$i]))
    echo 
    $files[$i].' - [DIR]<br>';
    }
        
    }

    ?>

    ЗЫ LStr1ke опередил =( Когда я читал тему небыло поста твоего =(
     
    #10 b3, 11 Dec 2009
    Last edited: 11 Dec 2009
    4 people like this.
  11. LStr1ke

    LStr1ke Elder - Старейшина

    Joined:
    29 Jul 2009
    Messages:
    801
    Likes Received:
    145
    Reputations:
    73
    b3
    Да правильно ) Пускай все варианты расматривает )
     
    1 person likes this.
  12. alpotemkin

    alpotemkin Elder - Старейшина

    Joined:
    7 May 2008
    Messages:
    57
    Likes Received:
    1
    Reputations:
    0
    LStr1ke, Да, этот скрипт - самое то! Использую его в качестве пособия, разберу по косточкам и постараюсь написать свой вариант. :)
    b3, Спасибо за свой вариант, но это немножко не то. Но тоже лишним не будет - пойдет в копилку пособий...