За последние 24 часа нас посетили 24362 программиста и 1725 роботов. Сейчас ищут 1826 программистов ...

Помогите с постраничной навигацией текстового файла

Тема в разделе "PHP для новичков", создана пользователем Alex84, 27 сен 2012.

  1. Alex84

    Alex84 Активный пользователь

    С нами с:
    12 фев 2012
    Сообщения:
    26
    Симпатии:
    0
    Такая проблема, решил разбивку текстового файла на строки преобразовать на разбивку на символы. В итоге у меня последний символ режит пополам. Если текстовый файл на английском то символов столько, сколько указал, если на русском то в два раза меньше.

    Вот код:

    Код (PHP):
    1. <?php
    2.  
    3.  
    4. // Читаем txt файл //
    5.  
    6. //$kom = file("$basicf/$_SESSION[filename]");
    7.  
    8. $kom = file_get_contents("$basicf/$_SESSION[filename]");
    9.  
    10.  
    11. // Всего строк //
    12.  
    13. //$all = count($kom);
    14.  
    15. // Всего симолов //
    16.  
    17. $all = mb_strlen($kom, "UTF-8");
    18.  
    19.  
    20. // Количество строк на странице //
    21.  
    22. //$pnumber = 20;
    23.  
    24.  
    25. // Количество символов на странице //
    26.  
    27. $pnumber = 2000;
    28.  
    29.  
    30. // Номер страницы //
    31.  
    32. $paget = (isset($_GET["paget"])) ? (int)$_GET["paget"] : 1;
    33.  
    34.  
    35. // Число страниц //
    36.  
    37. $num_pages = ceil($all / $pnumber);
    38.  
    39.  
    40. // Начальная позиция //
    41.  
    42. $start = $paget * $pnumber - $pnumber;
    43.  
    44.  
    45. // Более последней //
    46.  
    47. if ($paget > $num_pages)
    48. {
    49. $paget = $num_pages;
    50. $start = $num_pages * $pnumber - $pnumber;
    51. }
    52.  
    53.  
    54. // Менее первой //
    55.  
    56. if ($paget < 1)
    57. {
    58. $paget = 1;
    59. $start = 0;
    60. }
    61.  
    62.  
    63. // Только цифры //
    64.  
    65. if (preg_match("/[^0-9]/", $_GET["paget"]))
    66. {
    67. $paget = 1;
    68. $start = 0;
    69. }
    70.  
    71.  
    72. // Шапка //
    73.  
    74. include "$inc/header.inc.php";
    75.  
    76.  
    77. echo '<div class="d">';
    78.  
    79.  
    80. // Элементы выводятся в обратном порядке!! //
    81.  
    82. // for ($i = $all - $start - 1; $i >= $all - $start - $pnumber; $i--)
    83.  
    84.  
    85. // Элементы выводятся не в обратном порядке!! //
    86.  
    87. $end = $paget * $pnumber;
    88. for ($i = $start; $i < $end; $i++)
    89. {
    90.  
    91.  
    92. if (!isset($kom[$i])) break;
    93.  
    94.  
    95. // Строки //
    96.  
    97. echo str_replace("\n", "<br />", htmlspecialchars($kom[$i]));
    98.  
    99.  
    100. }
    101.  
    102.  
    103. echo '</div>';
    104.  
    105.  
    106. // Если страниц больше, чем 1 //
    107.  
    108. if ($all > $pnumber)
    109. {
    110.  
    111.  
    112. // Сохранение данных в сессии //
    113.  
    114. $_SESSION["paget"] = $paget;
    115.  
    116.  
    117. // Страницы //
    118.  
    119. echo '<div class="d">';
    120. for ($pr = '', $i = 1; $i <= $num_pages; $i++)
    121. {
    122. echo $pr = (($i == 1 || $i == $num_pages || abs($i - $paget) < 2) ? ($i == $paget " [$i] " : ' [url="'.$_SERVER['SCRIPT_NAME'].'?paget='.$i.'"]'.$i.'[/url] ') : (($pr == ' ... ' || $pr == '')'' : ' ... '));
    123. }
    124. echo '<br /></div>';
    125.  
    126.  
    127. }
    128. ?>