Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Praktyczne zastosowanie obsługi plików
Forum PHP.pl > Forum > Przedszkole
Szymciosek
Witam,
jestem w trakcie czytania vademecum, początki dopiero czyli obsługa plików, otwieranie, edycja, zapisywanie itp... ale jakie to ma zastosowanie w praktyce ? Znajomy wspomniał np o JSON, że to właśnie z tego korzysta, z plików tekstowych... ale ja chciałbym to przeczytać w bardziej zrozumiałym języku.

Pozdrawiam
Szymon
prowseed
Pliki tekstowe często traktujesz jak małe bazy danych, agregatory informacji. Zastosowań jest pełno. Co prawda mają one większe branie w desktopowych programach kompilowanych ( rejestr,ini/xml,sqlite ), ale gwarantuję Ci, że natrafisz na setki przypadków, gdy niezbędna będzie obróbka plików tekstowych z poziomu php. Czy to jakieś dane kontaktowe od klienta w formacie csv, czy obsługa małego chatu na stronie, możliwość edycji plików szablonu z poziomu panelu administracyjnego, generowanie arkuszy excel z raportami, zbieranie logów, tworzenie rss'ów... No po prostu dużo tego. Tak samo jak dużo masz różnych form czytania i obróbki owych plików.
A JSON to tylko standard zapisu informacji, zwykłe drzewko, coś jak xml, tylko inaczej pokazane.
camikazee
Ja do plików tekstowych zrzucam logi użytkowników, tak by nie zaśmiecać bazy. Mechanizm cacheowania również jest na nich oparty. Po prostu najwygodniej trzymać tam informacje, które niepotrzebnie by zajmowały mi miejsce w bazie danych.
Oczywiście jako początki w programowaniu dobrze jest napisać kilka skryptów na nich opartych, np księgę gości, by nauczyć się zapisywać, pobierać filtrować itp.
Szymciosek
Witam ponownie, próbuję zrobić jakiś zapis danych z textarea do pliku, no niby działa, ale:

index.php - wyświetla mi zawartość pliku na pierwszej stronie
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>Untitled Document</title>
  6. </head>
  7. <body>
  8.  
  9. <form name="addReview" action="add.php" method="post">
  10. <input type="submit" name="add" value="Dodaj wpis" />
  11. </form>
  12.  
  13. <?php
  14.  
  15. echo '<hr />';
  16. $file = fopen("wpisy.txt", "r");
  17. $string = fpassthru($file);
  18. echo nl2br($string);
  19. fclose($file);
  20.  
  21. ?>
  22.  
  23. </body>
  24. </html>


add.php - formularz textarea
  1. <?php
  2.  
  3. function add()
  4. {
  5. echo '<html>';
  6. echo '<head>';
  7. echo '<body>';
  8. echo '<form action="send_form.php" method="post">';
  9. echo '<textarea cols="50" rows="5" name="textarea"></textarea><br />';
  10. echo '<input type="submit" name="submit_form" value="Dodaj wpis" />';
  11. echo '</form>';
  12. echo '</body>';
  13. echo '</head>';
  14. echo '</html>';
  15. $file = fopen("wpisy.txt", "a+");
  16. }
  17.  
  18. if($_POST['add'])
  19. {
  20. add();
  21. }
  22.  
  23. ?>
  24. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  25. <html xmlns="http://www.w3.org/1999/xhtml">
  26. <head>
  27. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  28. <title>Untitled Document</title>
  29. </head>
  30. <body>
  31.  
  32.  
  33.  
  34. </body>
  35. </html>



i teraz problem, myślę, że to tutaj:
send_form.php
  1. <?php
  2.  
  3. $tresc = $_POST['textarea'];
  4. $file = fopen("wpisy.txt", "a+");
  5. //fputs($file, $tresc); //jesli to odkomentujemy, a w komentarz damy 2 linie poniżej to nie działa...
  6. $string = "dupa\n ddd"; //w tym przypadku działa
  7. fputs($file, $string); //to się tyczy powyższego
  8. fclose($file);
  9.  
  10. ?>
  11. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  12. <html xmlns="http://www.w3.org/1999/xhtml">
  13. <head>
  14. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  15. <title>Untitled Document</title>
  16. </head>
  17. <body>
  18.  
  19.  
  20.  
  21. </body>
  22. </html>


Mianowicie chodzi o brak \n w pliku txt, gdy w tym miejscu $tresc = $_POST['textarea']; zostanie odebrany taki tekst z textarea:
Kod
To
jest
jakiś
tekst
z
enterami


To w pliku txt otrzymuję
Kod
To
jest
jakiś
tekst
z
enterami


ale przy próbie jego wypisania w index.php otrzymuję:
"?To jest jakiś tekst z enterami39 "

Czym jest ta 39 w tym przypadku ?
Czemu to nie działa jak należy, gdzie popełniłem błąd ?
camikazee
A od strony kodowej jak podejrzysz źródło, wstawione są zamiast \n znaczniki br?
Szymciosek
Nie wiedziałem jak to wstawić żeby zrobić ten prostokącik:

http://www17.speedy.sh/JsJTY/bez-tytulu.JPG

Wykrzacza się po prostu...

Edit:
Dodam, że w szkole mam tutaj IE6, ale na nowej operze jest to samo, tyle, że nie widzę tego krzaczka...
camikazee
Ten prostokącik to znak nowej linii. Wygląda na to, że funkcja nl2br nie zamienia \n na znaczniki htmlowe. Ogólnie taka rada, zainstaluj sobie np Notepad++
Szymciosek
Mam go tutaj i to właśnie w nim piszę te skrypty, a plik txt stworzony został sam ze skryptu php... to i tak nie zmienia faktu, że nie działa

EDIT:
coś z tym plikiem txt chyba musi być nie tak, skoro podając mu gotowego stringa wszystko ładnie się wyświetla ?
camikazee
Ogólnie ja nigdy nie stosowałem przy odczycie z pliku funkcji fpassthru.
Jeżeli użyjesz standardowo
  1. $string = fread($file, filesize("wpisy.txt"));

To będzie działać bez problemu.
Zapoznaj się również z file_ get_ contents oraz file_ put_ contents
Szymciosek
Witam ponownie, owszem przykład wyżej działa z fread(), ale teraz jest inne pytanie

mam coś takiego tutaj na laptopie, wszystko dzieje się na serwerze lokalnym i przeglądarce IE6, mam fwrite($plik, "dupa \r\n"); i owszem znosi mi to w pliku txt linijkę niżej, a w szkole jak robiłem to wystarczyło tylko fwrite($plik, "dupa \n");

Jaka jest różnica między \r\n a samym \n ? I czemu tu działa inaczej i tam inaczej ?
prowseed
Cytat(Szymciosek @ 20.04.2012, 22:00:42 ) *
Jaka jest różnica między \r\n a samym \n ? I czemu tu działa inaczej i tam inaczej ?

Z tego, co pamietam to to zalezy od systemu operacyjnego i zeby wszedzie sie poprawnie wyswietlalo zaleca sie stosowanie \r\n.
Sa to mniej wiecej te same znaki oznaczenia nowej linii.

//EDIT
tu masz cala bajke: http://en.wikipedia.org/wiki/Newline
potreb
Zainteresuj się funkcją file, idealna do przetwarzania danych
Szymciosek
mam taki plik txt

Kod
Szymon
Marcin
Patryk
Patrycja
Martyna
Monika
Kamil
Grzegorz


Powinno być
10 linijek


i taki php:
  1. <?php
  2.  
  3. $file = 'test.txt';
  4. $lines = file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
  5.  
  6. foreach($lines as $line)
  7. {
  8. if($line != "\r" && $line != "\n")
  9. {
  10. echo $line.'<br />';
  11. }
  12. }
  13.  
  14. ?>


ale teraz tak:
1) Dobrze rozumiem, że FILE_IGNORE_NEW_LINES oraz FILE_SKIP_EMPTY_LINES ominie mi puste linie w tekście tak jak jest przerwa między Grzegorz a Powinno ?
2) foreach wiem, ale jakoś dziwnie zadziałał ten warunek, bo jeśli dam mu tylko if($line != "\r") to działa też, jeśli dam if($line != "\r" && $line != "\n") to również działa, ale jeśli zrobię if($line != "\r" || $line != "\n") to przestaje to działać, a wg tego co mi wiadomo to właśnie w takim przypadku powinno działać z || czyż nie ?
3) Czy w ogóle takie coś jest poprawne składniowo czy da się łatwiej wyrzucić z tekstu puste linie żeby nie były odczytywane przez przeglądarkę, ale fizycznie istniały w pliku ? Chodzi o to, że np księga gości dodaje mi NICK oraz TREŚĆ WPISU i teraz nie chciałbym żeby to wszystko było w linie czyli coś w stylu: Marcin to jest jego wpis Mateusz a to jest wpis Matiego itd... już wiem jak rozdzielić wpisy od imion itd, ale teraz doszło mi do tego file() jak to polecił przedmówca.
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.