Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kolejność wczytywania
Forum PHP.pl > Forum > PHP
kimu
Chciałym zmienić kolejność wczytywania informacji z pliku "ogloszenia.txt". Skrypt który wczytuje informacje to:

  1. <?php 
  2. // wczytanie zawartości pliku do tablicy 
  3. $file = file("ogloszenia.txt"); 
  4. // przechodzimy przez tablicę za pomocą pętli foreach 
  5. foreach($file as $value) { 
  6. // rozbijamy poszczególne linie na części 
  7. $exp = explode("`",$value); 
  8. // wyświetlamy rozbity tekst 
  9. echo $exp[0]."<br />"."<br />".$exp[1]."<br />"; 
  10. } 
  11. ?>


Nastomiast ksrypt który te informacje wcześniej dopisuje do pliku to:

  1. <?php 
  2.  $pole2 = trim($_POST['pole2']);
  3. $pole2 = str_replace("\n","<br>",$pole2); 
  4.  
  5. if(empty($pole1) and empty($pole2)) { 
  6.  
  7. // prosty formularz zawieraj&plusmn;cy dwa pola 
  8. echo '<form action="" method="post"> 
  9. <textarea name="pole2" style="width: 580px; height: 300px; background-color: #C5CDCE; border: 1 solid #000000" rows="1" cols="20">
  10. Wpisz treść ogłoszenia.
  11. </textarea><br /> 
  12. <input type="submit" value="Zapisz" /> 
  13. </form>'; 
  14. } 
  15. else { 
  16.  
  17. // dane pochodz&plusmn;ce z formularza 
  18. $dane = $pole2."<br />"."<br />"."<br />"."<hr color=gray size=1 />"."<br />"."<br />";"\n";
  19. // przypisanie zmniennej $file nazwy pliku 
  20. $file = "ogloszenia.txt"; 
  21. // uchwyt pliku, otwarcie do dopisania 
  22. $fp = fopen($file, "a"); 
  23. // blokada pliku do zapisu 
  24. flock($fp, 2); 
  25. // zapisanie danych do pliku 
  26. fwrite($fp, $dane); 
  27. // odblokowanie pliku 
  28. flock($fp, 3); 
  29. // zamknięcie pliku 
  30. fclose($fp); 
  31. } 
  32. ?>


Dzięku temu skryptowi dane wczytywane są w ten sposób że nowe wpisy idą w dół. A ja chciałbym aby nowe wpisy były zawsze na samej górze. Jak zmienić skrypt aby tak właśnie było ?
qba10
Cytat
  1. <?php
  2. $fp = fopen($file, "r+");
  3. ?>

wystarczy "a" zmienić na "r+" w funkcji fopen()
kimu
Przy zamianiae "a" na "r+" poprostu mi podmienia wpisy, a nie dopisuje. Tzn. dodając "wpis 2" kasuje się "wpis 1".
koval7
  1. <?php
  2. $dane.=fread($fp, filesize('ogloszenia.txt'));
  3. ?>

daj to przed
  1. <?php
  2. fwrite($fp, $dane);
  3. ?>

a plik otwórz tak, jak mówił qba10

Ja zrobiłbym to z file_get_contents i file_put_contents
phpion
:|
po co tak kombinować? Skoro skrypty są już napisane chyba najlepiej pójść po najmniejszej linii oporu...
Zamień linijkę:
  1. <?php
  2. $file = file("ogloszenia.txt");
  3. ?>

na
  1. <?php
  2. $file = array_reverse(file("ogloszenia.txt"));
  3. ?>
kimu
Teraz plik odczytujący wygladą tak (zgodnie z tym co napisał phpion.com):

  1. <?php 
  2. // wczytanie zawartości pliku do tablicy 
  3. $file = array_reverse(file("ogloszenia.txt"));
  4. // przechodzimy przez tablicę za pomocą pętli foreach 
  5. foreach($file as $value) { 
  6. // wyświetlamy rozbity tekst 
  7. echo $value."<br />"."<br />"."<br />"; 
  8. } 
  9. ?>


plik zapisujący natomiast tak:

  1. <?php 
  2. $pole2 = trim($_POST['pole2']);
  3. $pole2 = str_replace("\n","<br>",$pole2); 
  4.  
  5. if(empty($pole1) and empty($pole2)) { 
  6.  
  7. // prosty formularz zawieraj&plusmn;cy dwa pola 
  8. echo '<form action="" method="post"> 
  9. <textarea name="pole2" style="width: 580px; height: 300px; background-color: #C5CDCE; border: 1 solid #000000" rows="1" cols="20">
  10. Wpisz treść ogłoszenia.
  11. </textarea><br /> 
  12. <input type="submit" value="Zapisz" /> 
  13. </form>'; 
  14. } 
  15. else { 
  16.  
  17. // dane pochodz&plusmn;ce z formularza 
  18. $dane = $pole2."<br />"."<br />"."<br />"."<hr color=gray size=1 />"."<br />"."<br />";"\n";
  19. // przypisanie zmniennej $file nazwy pliku 
  20. $file = "ogloszenia.txt"; 
  21. // uchwyt pliku, otwarcie do dopisania 
  22. $fp = fopen($file, "a"); 
  23. // blokada pliku do zapisu 
  24. flock($fp, 2); 
  25. // zapisanie danych do pliku 
  26. fwrite($fp, $dane); 
  27. // odblokowanie pliku 
  28. flock($fp, 3); 
  29. // zamknięcie pliku 
  30. fclose($fp); 
  31. } 
  32. ?>


I nadal zamiast dopisywać kolejne wpisy do góry, skypt dodaje je w dół. Więc nadal coś jest nie tak :/

Pliki ze skryptem znajdują się tutaj: zapis, odczyt oraz plik ogloszenia.txt
legorek
Zapisuj z góry na dół a wyświetlaj tak jak podał phpion.com, z dołu do góry i uzyskasz efekt który chciałeś.
kimu
Kiedy zmieniac "a" na "r+" to wtedy wpisy się podmieniają a nie dopisują.
legorek
Okej napiszę tak, żebyś zrozumiał. Wróć do bazowej wersji skryptu.

W skrypcie zapisującym nic nie zmieniaj. Czyli pozostaw 'a'.
W skrypcie odczytującym zamień:
  1. <?php
  2. $file = file("ogloszenia.txt");
  3. ?>

na
  1. <?php
  2. $file = array_reverse(file("ogloszenia.txt"));
  3. ?>


W ten sposób co prawda, w pliku będziesz miał najnowsze na dole, ale dzięki zastosowaniu array_reverse" title="Zobacz w manualu PHP" target="_manual przy wyświetlaniu będą na górze.

A temat nadaje sie do przedszkola.
Hacker
Ale przecież to mu nic nie da. Nadal będzie nie działać... dlaczego?
średnik zamiast kropki (a tak propos to za dużo tych kropek...)
  1. <?php
  2. $dane = $pole2."<br /><br /><br /><hr color=gray size=1 /><br /><br />".PHP_EOL;
  3. ?>
kimu
Czyli to co napisał legorek plus zamiana tego:

  1. <?php
  2. $dane = $pole2."<br />"."<br />"."<br />"."<hr color=gray size=1 />"."<br />"."<br />";"\n";
  3. ?>


na to:

  1. <?php
  2. $dane = $pole2."<br /><br /><br /><hr color=gray size=1 /><br /><br />".PHP_EOL;
  3. ?>

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