Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Praktyczne zastosowanie obsługi plików, np txt
Szymciosek
post
Post #1





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
prowseed
post
Post #2





Grupa: Zarejestrowani
Postów: 433
Pomógł: 64
Dołączył: 29.01.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
camikazee
post
Post #3





Grupa: Zarejestrowani
Postów: 171
Pomógł: 18
Dołączył: 17.04.2006
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Szymciosek
post
Post #4





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

Ostrzeżenie: (0%)
-----


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 ?

Ten post edytował Szymciosek 18.04.2012, 07:34:24
Go to the top of the page
+Quote Post
camikazee
post
Post #5





Grupa: Zarejestrowani
Postów: 171
Pomógł: 18
Dołączył: 17.04.2006
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


A od strony kodowej jak podejrzysz źródło, wstawione są zamiast \n znaczniki br?
Go to the top of the page
+Quote Post
Szymciosek
post
Post #6





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

Ostrzeżenie: (0%)
-----


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...

Ten post edytował Szymciosek 18.04.2012, 08:04:38
Go to the top of the page
+Quote Post
camikazee
post
Post #7





Grupa: Zarejestrowani
Postów: 171
Pomógł: 18
Dołączył: 17.04.2006
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


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++
Go to the top of the page
+Quote Post
Szymciosek
post
Post #8





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

Ostrzeżenie: (0%)
-----


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 ?

Ten post edytował Szymciosek 18.04.2012, 08:10:42
Go to the top of the page
+Quote Post
camikazee
post
Post #9





Grupa: Zarejestrowani
Postów: 171
Pomógł: 18
Dołączył: 17.04.2006
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Szymciosek
post
Post #10





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

Ostrzeżenie: (0%)
-----


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 ?
Go to the top of the page
+Quote Post
prowseed
post
Post #11





Grupa: Zarejestrowani
Postów: 433
Pomógł: 64
Dołączył: 29.01.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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

Ten post edytował prowseed 20.04.2012, 23:53:26
Go to the top of the page
+Quote Post
potreb
post
Post #12





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Zainteresuj się funkcją file, idealna do przetwarzania danych

Ten post edytował potreb 21.04.2012, 00:03:53
Go to the top of the page
+Quote Post
Szymciosek
post
Post #13





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.08.2025 - 00:11