Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] ostatnio dodany plik
Forum PHP.pl > Forum > Przedszkole
Substr
Witam. Ściągnąłem stąd http://skrypty.webpc.pl/pokaz59.html skrypt downloadu. Pieknie przystosowalem go do swojej strony, tak by był zgodny z validatorem i niby wszystko działa. Ale, do pliku last.dat dodawana jest linijka z ostatnio dodanym do downloadu plikiem.

Część kodu odpowiedzialnego za dodawanie wyglada tak.
plik admin.php
  1. $write_str="$line[0]||$line[1]||$line[2]\n";
  2. if ($line[2]!="") {
  3. fputs ($f, $write_str);
  4. }
  5. }
  6. flock($f, 3);
  7. fclose($f);
  8. $base_file=("data/$base_name.dat");
  9. $desc=stripslashes($desc);
  10. $title=stripslashes($title);
  11. $desc=eregi_replace("\n", "<br>", $desc);
  12. $add_data="0||$title||$f_name||$desc||$size||$f_id\n";
  13. $fp=fopen($base_file, "a");
  14. flock($fp, 2);
  15. if ($f_name!="") {
  16. fputs ($fp, $add_data);
  17. flock($fp, 3);
  18. fclose($fp);
  19. $categ=str_replace("_", " ", $cat_name);
  20. $lf=fopen("data/last.dat", "w");
  21. flock($lf, 2);
  22. fputs($lf, "<a href=download/download.php?action=save&cat=$base_name&id=$f_id>$title</a>");
  23. flock($lf, 3);
  24. fclose($lf);
  25. echo "$menu<br>Dodano plik <b>$f_name</b> do kategorii <b>$categ</b>.";
  26. if (!eregi("http://", $f_name)) {
  27. if (file_exists("files/$f_name")) {
  28. echo "<br>Plik jest już umieszczony w katalogu \"download/files\".";
  29. }
  30. else {
  31. echo "<br>Przekopiuj teraz plik do katalogu \"download/files\".";
  32. }
  33. }
  34. else {
  35. echo "<br>Plik będzie pobierany ze zdalnego serwera.";
  36. }
  37. }
  38. break;


Zapisuje on do pliku last.dat coś takiego
  1. <a href=download/download.php?action=save&cat=kategoria&id=nazwa>nazwa pliku</a>


i w tym jest problem, ze zapisuje tylko _ostatni_ plik, a poprzedni kasuje. Ja chciałbym aby zapisywał np 5 ostatnich i tu zaczyna sie mój problem. PHP znam w stopniu początkującym, jeśli ktoś ma jakieś rady jak to zrobić to chętnie wysłucham i dziekuje za pomoc.
Fifi209
Rady:

1. Nie używaj eregi tylko preg_match
2. Używaj file_get_contents i file_put_contents
Substr
Ten skrypt był pisany w 2002 roku.. hehe
Dodałem do kodu
  1. $lf=fopen("data/last.dat", "w");


zamiast 'w', 'a'.. tylko, że dodaje mi na końcu pliku, a ja wolał bym aby dodawał na początku. Niestety nie mogę znaleść w jakim trybie jest to możliwe, bo 'r+' nie działa.

Ma ktoś jakiś pomysł na to, żeby do pliku zapisywał tylko 5 lini i w razie potrzeby stare kasował a nowe dodawał?
Fifi209
Wczytaj plik linia po linii file i potem podmień jedną i zapisz do pliku.
Substr
Powiedzmy, ze mam cos takiego

  1. <?php
  2. $plik = 'jakis_plik.txt';
  3. $zawartosc = file($plik);
  4. unset($zawartosc[0]);
  5. $zawartosc = implode("r\n",$zawartosc);
  6. $u = fopen($plik,'w');
  7. fwrite($u,$zawartosc);
  8. ?>


Chyba to był by kod odpowiedzialny za usuniecie 1 lini w tablicy. Jesli nie to prosze o poprawienie.

Teraz takie pytanie, w jakim trybie zapisac by dodał na początku pliku?
thek
Jako taki nie istnieje tryb otwarcia, który by pozwalał dodawać i jednocześnie ustawiał się na początku. Musisz ręcznie mu to wskazać. Dlatego otwórz plik w trybie append (a) i przesuń wskaźnik pliku na jego początek by móc dopisywać na początku.
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.