Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Zapisywanie do pliku: nadpisuje mi treść
Forum PHP.pl > Forum > Przedszkole
grattz
Mam taką funkcję która ma za zadanie zapisywanie do pliku wejscia admina na podstrone forum:
  1. <?php
  2. //dodawanie do pliku nowych postow w ktorych brałem udział
  3. if (isset($_SESSION['user'])){
  4.  $plik=fopen('admin.php','w');
  5.  flock($plik,LOCK_EX);
  6.  fputs($plik,'$post['.$id.']='' .time(). '';');
  7.  flock($plik,LOCK_UN);
  8.  fclose($plik);
  9. }
  10. ?>

No i ladnie przybiera mi to formę jaką chce : ( ale bez <?PHP i ?> )
  1. <?php
  2. $post[53]='1212085156';
  3. ?>


Ale następne wejście na podstronę i wywołanie skryptu powoduje nadpisanie pliku a nie dodanie informacji w nowej linii. Czemu ?
I jak zrobic zeby w tym pliku admin treść zapisywała sie pomiędzy <?php i ?>
batman
Lista możliwych trybów dla fopen(). Poczytaj w manualu dlaczego tak się dzieje.
piotrooo89
z tego manuala co Ci dał batman skorzystaj... a ja Ci powiem że powinien być to tryb a+ który otworzy plik do odczytu i zapisu ale ustawi kursor na końcu co umożliwi dalsze dopisane informacji.
grattz
Super. To jeszcze jak zrobic zeby na koncu zawsze było:
?>
Danone
Tak powinno dopisać

  1. <?php
  2. fputs($plik,'$post['.$id.']='' .time(). '';?>');
grattz
Cytat(Danone @ 29.05.2008, 21:01:50 ) *
Tak powinno dopisać

  1. <?php
  2. fputs($plik,'$post['.$id.']='' .time(). '';?>');

Też tak myślalem ale wtedy do każdego nowego rekordu dodaje sie to "?>" więc takie coś odpada.
Może to na poziomie include('admin.php'); jest coś nie tak.
Kicok
  1. <?php
  2.  
  3. fseek( $fp, -2, SEEK_END );
  4. fwrite( $fp, '(...)' );
  5.  
  6. ?>



problem wystąpi, gdy "?>" nie będą ostatnimi znakami w pliku.
Może po prostu daruj sobie to "?>" w admin.php? ;]
batman
Funkcja fseek nie zadziała, jeśli plik otwierany jest w trybie dodawania (a lub a+). Jedynym wyjściem jest pobranie zawartości całego pliku, dodanie w odpowiednim miejscu tekstu, a następnie zapisanie do pliku nowej zawartości.
grattz
Cytat(Kicok @ 29.05.2008, 21:31:09 ) *
Może po prostu daruj sobie to "?>" w admin.php? ;]

HAHA rzeczywiście problem sie rozwiązał guitar.gif Dziwne. To jeszcze mam pytanie kosmetyczne.
Jak zamiast formy:
  1. <?php
  2. $post[53]='1212089508';$post[1]='1212089641';$post[45]='1212089643';
  3. ?>

Uzyskać
  1. <?php
  2. $post[53]='1212087361';
  3. $post[43]='1212087425';
  4. $post[38]='1212087427';
  5. ?>
pyro
afff...

  1. <?php
  2. // po zapisie do pliku wiersza
  3. // ...
  4.  
  5. $plik = 'pliczek.txt';
  6. if(substr(file_get_contents($plik), -2) != '?>')
  7. {
  8. // zapisz '?>' na koncu
  9. }
Kicok
Cytat
Funkcja fseek nie zadziała, jeśli plik otwierany jest w trybie dodawania (a lub a+). Jedynym wyjściem jest pobranie zawartości całego pliku, dodanie w odpowiednim miejscu tekstu, a następnie zapisanie do pliku nowej zawartości.

Albo otwarcie pliku w trybie r+


A entery się robi przez "\r\n"
grattz
Tak próbuje wstawić to enter tutaj
  1. <?php
  2. fputs($plik,'$post['.$id.']='' .time(). '';');
  3. ?>

i mi nie wychodzi. Jak to umieścić żeby przełamywało wiersz ?
pyro
  1. <?php
  2. if(stristr(PHP_OS, 'win'))
  3. {
  4. $nl = "r\n";
  5. }
  6. else
  7. {
  8. $nl = "\n";
  9. }
  10. ?>

teraz dajesz $nl (nową linię) tam, gdzie chcesz, żeby był przełamany wiersz
grattz
Dzięki guitar.gif
nexis
Cytat(pyro @ 29.05.2008, 22:11:19 ) *
  1. <?php
  2. if(stristr(PHP_OS, 'win'))
  3. {
  4. $nl = "r\n";
  5. }
  6. else
  7. {
  8. $nl = "\n";
  9. }
  10. ?>


  1. <?php
  2. PHP_EOL;
  3. ?>


Nie łatwiej? smile.gif
pyro
hehe, kompletnie zapomniałem o tej stałej =D, ale i tak jest ok
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.