18.07.2019, 19:18 [+3 UTC]
в нашей команде: 3 747 чел. | участники онлайн: 4 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.77 (31.05.2019)
JS-v.1.34 | CSS-v.3.35

Общие новости:
28.04.2019, 09:13

Форум:
18.07.2019, 12:26

Последний вопрос:
18.07.2019, 11:30
Всего: 149936

Последний ответ:
18.07.2019, 12:04
Всего: 258705

Последняя рассылка:
17.07.2019, 22:15

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
18.11.2010, 21:06 »
alya_koshka
спасибо огромное [вопрос № 180841, ответ № 264187]
16.03.2010, 07:35 »
Dipauler
Спасибо, помогло! Жаль, что вы не написали, как именно изменить значение MTU для нужного интерфейса. [вопрос № 177210, ответ № 260146]
15.02.2010, 09:22 »
jeck26
Спасибо за ответ. Предпочитаю видеокарты от NVIDIA. Подожду немного, посмотрю что предложит ATI (Radion HD5000) [вопрос № 176646, ответ № 259395]

РАЗДЕЛ • PHP / Perl / Python

Создание программ на языках PHP, Perl и Python.

[администратор рассылки: Коцюрбенко Алексей Владимирович (Модератор)]

Лучшие эксперты в этом разделе

Коцюрбенко Алексей Владимирович
Статус: Модератор
Рейтинг: 140
Асмик Гаряка
Статус: Советник
Рейтинг: 0
Хватов Сергей
Статус: Академик
Рейтинг: 0

Перейти к консультации №:
 

Консультация онлайн # 142334
Раздел: • PHP / Perl / Python
Автор вопроса: Hugonavy
Отправлена: 26.08.2008, 18:52
Поступило ответов: 2

Доброго времени суток уважаемые! Вопрос таков: есть отдельный файл с текстом (*.txt). Хочу сделать так, чтобы скрипт делил текст по, допустим, 600 или 800 символов, выводил эту часть на страницу, а внизу распологалось бы навигационное меню (назад|вперед <1|2|...|5|6|7|...|15|16>)

Состояние: Консультация закрыта

Ответ # 227943 от PVS@Lviv

Здравствуйте, Hugonavy!

ну если сторго по N символов, то алгоритм приблизительно следующий:
1)если параметр с номером страницы не указан - показывать первую страницу
2)показать символы с (page-1)*N по page*N
3)нагенерить (int)(length(text)/N+0.5) ссылок на страницы, при желании текущую можно как-то выделить

если совершенствовать скрипт, то стоит делить по границе слова (не резать слово посредине если оно не попадает в диапазон).


Консультировал: PVS@Lviv
Дата отправки: 26.08.2008, 19:16

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Ответ # 227948 от Абельхарисов Руслан/Marked One

Здравствуйте, Hugonavy!
В приложении скрипт с небольшими коментариями, который осуществляет поставленную вами задачи. Файл и число символов(n) указывается на форме. Файл должен быть в папке со скриптом. Предполагается, что скрипт называется index.php
Удачи!!!

Приложение:


Консультировал: Абельхарисов Руслан/Marked One
Дата отправки: 26.08.2008, 21:18

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 142334
PVS@Lviv

# 1

= общий = | 26.08.2008, 18:58

вопрос-то в чём? что не получается?

неизвестный

# 2

= общий = | 26.08.2008, 19:02

вообще самого алгоритма понять не могу. Недавно только с php разбираться начал

неизвестный

# 3

= общий = | 26.08.2008, 19:41

Что-то подобное я нашел, подстроил чуть-чуть под себя, но все равно что-то не то




<?php
function textpart($text, $count=100)
{
$number = @ $_GET['number'];

if($count > 0) { $text = wordwrap($text,$count, "[page]"); }

$str = explode("[page]", $text);
// Выясняем сколько страниц
$count = count($str);
//Выводим страницу
empty ($number) ? $number = 0 : $number < 0 ? $number = 0 : "";
echo $str[($number)];

echo "<br/>";
echo "<br/>";
// Если текущая страница первая, то выводим продолжить
if ($number == 0 and count($str) > 1) {
echo "<br/><a href='?number=" . ($number +1) . "'>[Читать дальше...]</a> <br/>"; }
else

{
// Проверяем текущая ли это страница
for ($i = 0; $i < $count; $i++) {
if ($i == $number) {
if ($i == ($count -1) and $count > 2) {
echo " <b>[$i]</b>";
echo " <a href='?number=0'> в начало</a>";
}
elseif ($i == ($count - ($count -1)) and $count > 2) {
echo " <a href='?number=" . ($count -1) . "'>в конец </a>";
echo " <b>[$i]</b>";

}
elseif ($i == $number) {
echo " <b>[$i]</b>";
}
} else {
echo " <a href='?number=$i'>[$i]</a>";

}
}
}
}
$str = file_get_contents("1.txt");
textpart($str,2000);
?>

PVS@Lviv

# 4

= общий = | 27.08.2008, 09:43

зачем так сложно единицу шифровать:
($count - ($count -1))
?
и на первый взгляд всё в порядке. Где именно "то-то не то"?

Абельхарисов Руслан/Marked One

# 5

= общий = | 27.08.2008, 21:40

В своем скрипте я обнаружил одну ошибку, которая позволяет получить доступ к файловой системе сервера. Т. е. если указать имя файла /etc/shadow, то можно получить доступ к именам пользователей и хэшам их паролей Linux сервера. Чтобы этого избежать достаточно вместо строк:

//Открываем файл для чтения
$file =fopen($_GET['file'], 'r');

поставить эти:
//Открываем файл для чтения
$file = @fopen(basename($_GET['file']), 'r');

Таким образом, если будет указано имя файла /ect/shadow, то откроется не этот файл, а файл shadow в папке со скриптом.
Кроме того я немного улучшил скрипт в плане дизайна:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
        <title>Вывод файла с постраничной навигацией</title>
    </head>
    <body>
      <form method="GET">
        Введите N: <input type="text" name="n" value="<?php echo $_GET['n'] ?>"/><BR>
        Имя файла(должен находиться в директории со скриптом!): <input type="text" name="file" value = "<?php echo $_GET['file']?>"/><BR>
        <input type="submit" value="Отправить!" /><BR><HR>
      </form>
        <?php
          //Если скрипту переданы имя файла и N, то обрабатываем файл
          if (!empty($_GET['n']) && !empty($_GET['file']))
          {
              //Открываем файл для чтения
              $file = @fopen(basename($_GET['file']), 'r');
              //Если произошла ошибка, то выходим
              if (!$file) exit('Ошибка открытия файла!');
              //Читаем файл
              $filestr = fread($file, filesize($_GET['file']));
              //Закрываем файл
              fclose($file);
              //Создаем массив из содержимого файла с помощью str_split
              $pages = str_split($filestr, $_GET['n']);
              //Если передана номер страницы, то выводим эту страницу
              if (!empty($_GET['pnum'])) 
                echo nl2br($pages[$_GET['pnum']]).'<BR>';
              else
                //Иначе выводим первую
                echo nl2br($pages[0]).'<BR>';
              //Получаем кол-во страниц
              $pagescount = count($pages);
              //Выводим ссылки
              echo '<HR>';
              if ($pagescount == 1)
              {
                 $prev = 0;
                 $next = 0;
              }
              elseif (empty($_GET['pnum']) || $_GET['pnum'] == 0)
              {
                $prev = 0;
                $next = 1;
              }
              elseif ($_GET['pnum'] == ($pagescount - 1))
              {
                $prev = $_GET['pnum'] - 1;
                $next = $_GET['pnum'];
              }
              else
              {
                  $prev = $_GET['pnum'] - 1;
                  $next = $_GET['pnum'] + 1;
              }
              echo '<BR><a href = "index.php?n='.$_GET['n'].'&file='.$_GET['file'].'&pnum='.$prev.'"><<Предыдущая</a> | ';
              for ($i = 0; $i < $pagescount; $i++)
              {
                $nn = $i + 1;
                echo '<a href = "index.php?n='.$_GET['n'].'&file='.$_GET['file'].'&pnum='.$i.'">'.$nn.'</a> | ';
              }             
              echo '<a href = "index.php?n='.$_GET['n'].'&file='.$_GET['file'].'&pnum='.$next.'">Следующая>></a>';
          }
        ?>
    </body>
</html>

неизвестный

# 6

= общий = | 28.08.2008, 02:25

А нельзя ли сделать все тоже самое, только без формы? Я попытался сам исправить, но выдалась только ошибка

Абельхарисов Руслан/Marked One

# 7

= общий = | 28.08.2008, 11:47

Вот, форма не нужна, открывается файл test.txt:

<?php
  //Указываем n
  $n = 800;
  //Читаем файл test.txt
  $filestr = file_get_contents('test.txt');
  //Создаем массив из содержимого файла с помощью str_split
  $pages = str_split($filestr,$n);
  //Если передана номер страницы, то выводим эту страницу
  if (!empty($_GET['pnum'])) 
    echo nl2br($pages[$_GET['pnum']]).'<BR>';
  else
    //Иначе выводим первую
    echo nl2br($pages[0]).'<BR>';
  //Получаем кол-во страниц
  $pagescount = count($pages);
  //Выводим ссылки
  echo '<HR>';
  if ($pagescount == 1)
  {
    $prev = 0;
    $next = 0;
  }
  elseif (empty($_GET['pnum']) || $_GET['pnum'] == 0)
  {
    $prev = 0;
    $next = 1;
  }
  elseif ($_GET['pnum'] == ($pagescount - 1))
  {
    $prev = $_GET['pnum'] - 1;
    $next = $_GET['pnum'];
  }
  else
  {
    $prev = $_GET['pnum'] - 1;
    $next = $_GET['pnum'] + 1;
  }
  echo '<BR><a href = "index.php?n='.$_GET['n'].'&pnum='.$prev.'"><<Предыдущая</a> | ';
  for ($i = 0; $i < $pagescount; $i++)
  {
    $nn = $i + 1;
    echo '<a href = "index.php?n='.$_GET['n'].'&pnum='.$i.'">'.$nn.'</a> | ';
  }             
  echo '<a href = "index.php?n='.$_GET['n'].'&pnum='.$next.'">Следующая>></a>';
?>

неизвестный

# 8

= общий = | 28.08.2008, 12:56

Спасибо!

 

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

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.16506 сек.

© 2001-2019, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.77 от 31.05.2019
Версия JS: 1.34 | Версия CSS: 3.35