Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Вывод данных из .txt (https://forum.antichat.xyz/showthread.php?t=161809)

alpotemkin 07.12.2009 20:09

Вывод данных из .txt
 
Доброго времени суток!

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

Код:

<?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);
 
?>

Раньше текстовые файлы просто сливались на комп и постились выборочно. Теперь же требуется, чтобы скрипт постил все новости.
Скрипт вывода из одного файла:
Код:

<?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) по убыванию даты постинга.

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

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

b3 08.12.2009 02:34

Когда новостей не много, то просканировать папку (scandir), реверснуть файлы(arsort) и вывести еще можно, но когда новостей будет ого-го то либо будут проблемы с оперативкой, либо с скоростью работы. Вообщем советую накатать скриптик который загонит твои новости в БД. Оттуда же и постраничную навигацию несложно сделать, вот как раз обсуждали http://forum.antichat.ru/thread161677.html

alpotemkin 08.12.2009 18:21

Хм... может и так.... Тем более, что у меня уже написан скрипт для этого... а скрипт постинга можно быстро переписать.
Спасибо за ссылку, немного не то, но некоторые моменты использую. :)

Vlad&slav 08.12.2009 20:07

DLE xD http://www.mid-team.ws/

alpotemkin 10.12.2009 15:58

Цитата:

Сообщение от b3
Когда новостей не много, то просканировать папку (scandir), реверснуть файлы(arsort) и вывести еще можно, но когда новостей будет ого-го то либо будут проблемы с оперативкой, либо с скоростью работы.

Новостей особо немного, раз в две недели-месяц добавляются. Потому я просто не вижу смысла использовать БД - сервер грузить не будет.

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

Код:

<?php

$dir='/news/';
$files=scandir($dir);

print_r($files);

?>

Но это только выводит список файлов, а не их содержимое... А если заменить print на readfile, то не работает.
А надо, чтобы скрипт просканировал папку с текстами и вывел их содержимое на сайт, по 10 на страницу.

b3 10.12.2009 16:01

Цитата:

Но это только выводит список файлов, а не их содержимое...
Ну так)) Список файлов в массиве, далее в цикле открываеш первых 10 файлов из массива, и выводиш на страничку, если страничка $page=2 то делаеш условие что вывод в цикле начинается с ключа [10] и заканчивается [20] елементарно =)

alpotemkin 10.12.2009 16:41

Возможно и элементарно, но я еще только учусь... Если не сложно, можете выложить пример такого скрипта?

Vlad&slav 11.12.2009 12:21

И мне)

LStr1ke 11.12.2009 13:50

Тестил на 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> "

?>


b3 11.12.2009 14:40

http://img37.imageshack.us/img37/7751/22504175.png

[+] Проверяет тип файл или папка:
Цитата:

DIRECTORY - [DIR]
IMG_1341.jpg - [FILE]
IMG_1342.jpg - [FILE]
IMG_1344.jpg - [FILE]
IMG_1347.jpg - [FILE]
IMG_1348.jpg - [FILE]
IMG_1349.jpg - [FILE]
[+] Проверяет что в адресную строку не вводиди всякую херь типа ?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 опередил =( Когда я читал тему небыло поста твоего =(

LStr1ke 11.12.2009 15:46

b3
Да правильно ) Пускай все варианты расматривает )

alpotemkin 13.12.2009 17:13

LStr1ke, Да, этот скрипт - самое то! Использую его в качестве пособия, разберу по косточкам и постараюсь написать свой вариант. :)
b3, Спасибо за свой вариант, но это немножко не то. Но тоже лишним не будет - пойдет в копилку пособий...


Время: 07:33