Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] wibieranie nazwy pliku
Forum PHP.pl > Forum > Przedszkole
szczemp
Piszę prosty system, ale w prostych systemach też pojawiają się ciekawe problemy.
Mianowicie system zapisuje do plików dane z formularza. Gdzieś w konfigu jest stała określająca max ilość plików - powiedzmy 5. Chcę, aby pliki miały nazwy 01, 02 .. ale nie więcej niż 05.
Aktualnie mam tak zrobione:
Metoda losuje liczbę z przedziału od 1 do max i sprawdzam czy plik z taką nazwą już istnieje. Jeśli istnieje istnieje to wywołuje siebie rekurencyjnie.
Teoretycznie metoda może wykonywać się w nieskończoność, bo za każdym wywołaniem wylosuje liczbę już zajętą.
Myślałem o czymś co zapamięta wylosowane ostatnio liczby i będzie losowało z pominięciem tych właśnie, ale jakoś mi się to nie podoba:))
Nie mogę też pobrać nazwy ostatnio utworzonego pliku albo największej liczby, bo pliki można kasować i np będą 01, 02, 03, 04, 05 i zostanie skasowany np 02. System pobierze najwyższy numer i powie, że już nie można utworzyć pliku, bo nie może mieć nazwy 06.
Macie jakiś pomysł na proste rozwiązanie, ale też takie, które nie zapętli mi skryptu?
d3ut3r
można w ten sposób:

  1. $max=5;
  2. $ext='txt'; //rozszerzenie plików
  3. $path='test/'; //sciezka do plikow
  4.  
  5. $nazwa='';
  6.  
  7. for ($i=1;$i<=$max;$i++){
  8.  
  9. if (!file_exists($path.$i.'.'.$ext)){
  10. $nazwa=$i.'.'.$ext;
  11. break;
  12. }
  13. }
  14. if ($nazwa){
  15. echo $nazwa;
  16. } else{
  17. echo "brak wolnych plików!";
  18. }
szczemp
Miałem już takie rozwiązanie, ale zrezygnowałem z niego, bo dobre dla niewielu plików - 5 podałem tylko dla przykładu.
rocktech.pl
Witam.

Spróbuj tak.

  1. $max = 5;
  2.  
  3. $ext = 'txt'; //rozszerzenie plików
  4.  
  5. $path = 'test/'; //sciezka do plikow
  6.  
  7. $files = glob ( "$path/*.$ext" );
  8.  
  9. $nazwa = false;
  10.  
  11. for ( $i = 1; $i <= $max; $i++ ) {
  12.  
  13. if ( !in_array ( $i . '.' . $ext, $files ) ) {
  14.  
  15. $nazwa = $i . '.' . $ext;
  16.  
  17. break;
  18. }
  19. }
  20.  
  21. if ( $nazwa ) {
  22. echo $nazwa;
  23. } else {
  24. echo "brak wolnych plików!";
  25. }
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.