Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Odwrotne wyświetlanie zawartości pliku?
Forum PHP.pl > Forum > Przedszkole
IdolwSzutrab7
Witam,
Szperałem już tutaj na forum w tej sprawie i wynalazłem podobne tematy, ale nic z nich nie wywnioskowałem i postanowiłem założyć swój.

Przedstawię w skrócię co stworzyłem w PHP:
Prostą stronkę, na której jest formularz i skrypt, który zapisuje dane z formularza do pliku tekstowego.
Drugi skrypt wyświetla dane z owego pliku tekstowego.

Już miałem kończyć, ale zauważyłem, że dane są wyświetlane od najstarszego do najnowszego.

Tak wygląda formularz:


  1. <table border="0" width="100%" height="100%">
  2. <tr>
  3. <td align="center" valign="center">
  4.  
  5. <form action="zyczenia-przetworzenie.php" method="post">
  6. <table border="0" align="center">
  7. <tr>
  8. <td align="right" valign="top" height="10px">
  9. Pseudonim:
  10. </td>
  11. <td align="left" valign="top">
  12. <input type="text" name="pseudonim" size="13" maxlength="20" />
  13. <input type="submit" value="Wyślij" style="float: right; cursor: pointer;">
  14. </td>
  15. </tr>
  16. <tr>
  17. <td align="right" valign="top">
  18. Życzenia:<br />
  19. <font style="font-size: 9px;">(Max. 160 znaków!)</font>
  20. </td>
  21. <td align="left" valign="top">
  22. <textarea type="text" name="zyczenia" cols="25" rows="2" maxlength="160"></textarea>
  23. </td>
  24. </tr>
  25. </form>
  26.  
  27. </td>
  28. </tr>
  29. </table>




Tak wygląda pierwszy skrypt:


  1. <table border="0" width="100%" height="100%">
  2. <tr>
  3. <td align="center" valign="center">
  4.  
  5. <?php
  6.  
  7. $tresczyczen = $_POST['zyczenia'];
  8. $pseudonim = $_POST['pseudonim'];
  9. $data = date ('H:i:s, d.m.Y');
  10.  
  11.  
  12.  
  13. echo '<div style="width: 300px;">';
  14. echo '<div style="text-align: left;">Twoja wiadomość:</div>';
  15. echo '<div style="text-align: left; border: 1px solid black; margin-top: 5px; margin-bottom: 5px; padding: 5px; width: 300px;">';
  16. echo $tresczyczen;
  17. echo '</div>';
  18.  
  19. if (empty($tresczyczen) or empty($pseudonim)) {
  20. echo "<font>Twoje życzenia nie zostały wysłane poprawnie!</font><br />";
  21. echo '<font><a href="./zyczenia-formularz.html">Kliknij tutaj,</a> aby spróbować ponownie...</font>';
  22. } else {
  23. echo "<font>Twoje życzenia zostały wysłane poprawnie!</font>";
  24. echo '<div style="text-align: right;">Dziękujemy!</div>';
  25. }
  26. echo "</div>";
  27.  
  28.  
  29.  
  30. $zyczenia = '<div style="text-align: left;">'.$tresczyczen."</div><div style='text-align: right;'><strong>Autor:</strong> ".$pseudonim."<br /><strong>Data:</strong> ".$data."</div><br /><br />\n";
  31.  
  32. $wp = fopen ("./zyczenia-lista.txt", 'a');
  33.  
  34. fwrite ($wp, $zyczenia);
  35.  
  36. $wielkoscpliku = filesize("./zyczenia-lista.txt");
  37.  
  38. if ($wielkoscpliku >= 2048) {
  39. unlink("./zyczenia-lista.txt");
  40. }
  41.  
  42. fclose($wp);
  43.  
  44. ?>
  45.  
  46. </td>
  47. </tr>
  48. </table>




A tak wygląda drugi skrypt:


  1. <table border="0" width="100%" height="100%">
  2. <tr>
  3. <td align="center" valign="center">
  4.  
  5. <?php
  6.  
  7. @ $wp = fopen ("./zyczenia-lista.txt", 'r');
  8.  
  9. echo '<div style="border: 0px solid black; width: 200px; padding: 3px;">';
  10.  
  11. if (!$wp) {
  12. echo "<font><strong>Uwaga:</strong> nikt nie przysłał żadnych życzeń, lub plik z życzeniami nie istnieje!</font>";
  13. } while (!feof($wp)) {
  14. $zyczenia = fgets($wp, 999);
  15. echo $zyczenia."<br />";
  16. }
  17.  
  18. echo '</div>';
  19.  
  20. fclose($wp);
  21.  
  22. ?>
  23.  
  24. </td>
  25. </tr>
  26. </table>




Nie znam się kompletnie na PHP - powyrzsze skrypty robiłem na podstawie informacji zawartych w podręczniku.
Wszystko ładnie działa, ale chciałbym, aby jednak te dane były wyświetlane na odwrót, niż są zapisane - albo, aby od razu były zapisywane na początku pliku, a nie na końcu.

Mogę prosić was o pomoc?
CuteOne
  1. $content = file_get_contents("./zyczenia-lista.txt");
  2. file_put_contents("./zyczenia-lista.txt", $zyczenia.$content);
IdolwSzutrab7
Cytat(CuteOne @ 3.11.2012, 15:48:25 ) *
  1. $content = file_get_contents("./zyczenia-lista.txt");
  2. file_put_contents("./zyczenia-lista.txt", $zyczenia.$content);


A do którego skryptu to dodać?
CuteOne
Przeczytaj w manualu co robią te funkcje i sam się domyśl smile.gif
IdolwSzutrab7
Poddaje się...
Główkowałem, główkowałem i nic nie wymyśliłem.

Nie mam pojęcia, czy mam moje funkcje zamienić tą podaną przez pana CuteOne, czy może mam ją dodać gdzieś na końcu, lub na początku - nie wiem.

Na php.net wyczytałem tylko, że jedna pobiera "contents" z adresu lub pliku do zmiennej, a druga wkleja "contents" z owej zmiennej, ale nic mi to nie dało.
jaslanin
pomyśl co robi $zyczenia.$content

i co to da przy zapisie do pliku
IdolwSzutrab7
Ale mam to zamienić z funkcją fwrite, czy tylko dodać, zostawiając funkcję fwrite?
b4rt3kk
Jeśli chcesz odczytać zawartość pliku w odwrotnej kolejności:

  1. $plik = file('sciezka_do_pliku');
  2. for ($i=sizeof($plik)-1; $i>=0; $i--) {
  3. echo $plik[$i].'<br/>';
  4. }
IdolwSzutrab7
Dobra, znajomy kolega podpowiedział mi w którym miejscu mam wkleić to:

Cytat(CuteOne @ 3.11.2012, 15:48:25 ) *
  1. $content = file_get_contents("./zyczenia-lista.txt");
  2. file_put_contents("./zyczenia-lista.txt", $zyczenia.$content);


Wnioskuje, że file_get_contents zastepuje mi fopen i jest ono nie potrzebne, ale jak widać z kodu, który umieściłem w temacie mam jeszczę takie małe zabezpieczenie, z funkcją unlink, która chyba powinna być między fopen a fclose, nieprawdaż?
nospor
A kto ci broni to zabezpieczenie dodać do nowej wersji? To zabezpieczenie jest niezależne od fopen czy file_get_contents...
IdolwSzutrab7
Yymm...
Przetestowałem smile.gif

fopen musi być i to jeszcze przed tymi dwiema funkcjami, ponieważ gdy go nie było to przy tworzeniu owego pliku, skrypt wywalił błąd, lecz utworzył plik i dodał do niego dane, ale ten bląd lekko wkurzał, więc na nowo dałem fopen na początku i fclose na końcu i śmiga jak ta lala.

Dziękuję bardzo za pomoc, daję pomógł.
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.