Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][txt]stronicowanie
Forum PHP.pl > Forum > Przedszkole
filet187
Witam chciałbym prosić o pomoc przy stronicowaniu z pliku txt
i czy jest możliwość ładowania z pliku powiedzmy 30lini aby nie ładowało wszystkich na raz bo plik przybiera na wadze i chcę uniknąć błędu
  1. Fatal error: Allowed memory size of 8388608 bytes exhausted


to tak mam plik edycja.php który wygląda tak

  1. <?php
  2. ini_set('display_errors', 1);
  3.  
  4. // pobieramy aktualne dane z pliku i zapisujemy je w tablicy data
  5. $file = file('log.txt', FILE_IGNORE_NEW_LINES);
  6. if(count($file) == 0) {
  7. echo 'Brak danych!';
  8. }else{
  9. foreach($file as $line) {
  10. $data[] = explode('||', $line);
  11. }
  12.  
  13. if(!empty($_POST) && $_POST['action'] == 'saveChanges') {
  14. $row = $_POST['row'];
  15. $firstname = isset($_POST['firstname']) ? $_POST['firstname'] : '';
  16. $lastname = isset($_POST['lastname']) ? $_POST['lastname'] : '';
  17. $city = isset($_POST['city']) ? $_POST['city'] : '';
  18. $data[$row][0] = $firstname;
  19. $data[$row][1] = $lastname;
  20. $data[$row][2] = $city;
  21. $file = fopen("log.txt", "w");
  22. foreach($data as $line){
  23. $newline = implode('||', $line);
  24. fputs($file, $newline . "\n");
  25. }
  26. fclose($file);
  27. }
  28.  
  29. if(isset($_GET['action'])) {
  30. if($_GET['action'] == 'edit' && isset($_GET['row']) && $_GET['row'] != '') {
  31. $row = $_GET['row'];
  32. ?>
  33. <form action="edycja.php" method="post">
  34. <input type="hidden" name="action" value="saveChanges" />
  35. <input type="hidden" name="row" value="<?php echo $row; ?>" />
  36. <dl>
  37. <dt>Ip:</dt>
  38. <dd><input type="text" name="firstname" value="<?php echo $data[$row][0]; ?>" /></dd>
  39. </dl>
  40. <dl>
  41. <dt>Data:</dt>
  42. <dd><input type="text" name="lastname" value="<?php echo $data[$row][1]; ?>" /></dd>
  43. </dl>
  44. <dl>
  45. <dt>Adres:</dt>
  46. <dd><input type="text" name="city" value="<?php echo $data[$row][2]; ?>" /></dd>
  47. </dl>
  48. <input type="submit" value="Zapisz zmiany" />
  49. </form>
  50. <?php
  51. }
  52. }
  53.  
  54. // wyĹ?ietlamy dane w odpowiedni sposĂłb
  55. ?>
  56. <style type="text/css">
  57. td {
  58. width: 150px;
  59. }
  60. </style>
  61. <table cellspacing="0" cellpadding="0" border="2">
  62. <tr><td>Ip</td><td>Data</td><td>Adres</td><td>Akcja</td></tr>
  63. <?php
  64. foreach($data as $rowNumber => $row) {
  65. ?>
  66. <tr>
  67. <td width="200" height="100"><div style="overflow: auto; width: 200px; height: 100px;"><?php echo $row[0]; ?></div></td>
  68. <td width="300" height="100"><div style="overflow: auto; width: 300px; height: 100px;"><?php echo $row[1]; ?></div></td>
  69. <td width="400" height="100"><div style="overflow: auto; width: 400px; height: 100px;"><?php echo $row[2]; ?></div></td>
  70. <td><a href="edycja.php?action=edit&row=<?php echo $rowNumber; ?>">Edytuj</a></td>
  71. </tr>
  72. <?php
  73. }
  74. ?>
  75. </table>
  76. <?php
  77. }
  78. ?>
  79.  

plik log.txt teraz ma 3000lini wyczyszczony dzisiaj rano i zawiera on adres ip dane i url jest to plik logów urlsnarf'a
wygląda on tak przykładowy wpis
Kod
192.168.1.110 || 4/Jun/2010:13:21:36 || http://forum.php.pl/l

więc tak jak pisałem chciałbym aby do nie ładowało całego tylko po liniach bo router nie wyrabia przy 40tys liniach
bardzo proszę o odpowiedz
erix
A o fgets słyszałes?
filet187
  1. <?php
  2. $otwieranie= fopen('log.txt', "a+");
  3. $odczyt= fgets($otwieranie, 30);
  4. echo "$odczyt";
  5. fclose($otwieranie);
  6. ?>

A jak zrobić aby otwierało 30 linii a nie 30 bitów
pifarek
Odbieraj po ileś tam bajtów, szukaj znaku końca linii i licz linie ;-)
filet187
  1. <?php
  2. $nazwaPliku = "log.txt";
  3. $tablica = array();
  4. $i = 0;
  5.  
  6. if (is_file($nazwaPliku))
  7. {
  8. $plik = fopen($nazwaPliku, "r");
  9.  
  10. while(!feof($plik))
  11.  
  12. {
  13. $linia = fgets($plik, 1024);
  14. $tablica[$i] = $linia;
  15. $i++;
  16. }
  17.  
  18. fclose($plik);
  19. foreach($tablica as $line)
  20. {
  21. $data[] = explode('||', $line);
  22. }
  23.  
  24. }
  25. ?>
  26. <style type="text/css">
  27. td {
  28. width: 150px;
  29. }
  30. </style>
  31. <table cellspacing="0" cellpadding="0" border="2">
  32. <tr><td>Ip</td><td>Data</td><td>Adres</td></tr>
  33. <?php
  34.  
  35. foreach($data as $rowNumber => $row) {
  36. ?>
  37. <tr>
  38. <td width="200" height="100"><div style="overflow: auto; width: 200px; h$
  39. <td width="300" height="100"><div style="overflow: auto; width: 300px; h$
  40. <td width="400" height="100"><div style="overflow: auto; width: 400px; h$
  41. </tr>
  42. <?php
  43. }
  44. ?>
  45. </table>
  46. <?php
  47. }
  48. ?>

czyta po bajtach i wczytuje całe 4700lini można jakoś ograniczyć ładowanie i jak wejdzie się na następna stronę aby ładowało dalsza np 50lini i jak zrobić stronicowanie
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.