Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Fopen() i pętla for
Forum PHP.pl > Forum > Przedszkole
switch75
Witam
Mam problem z automatycznym tworzeniem plików (nazwy pobierane z tablicy).
Wrzucam funkcje fopen() do pętli for i tworzy mi tylko plik z ostatniego przejścia pętli. Wcześniejszych plików nie tworzy.To samo jest gdy użyje touch
Inne operacje na tej pętli działąją np echo.

Jeśli ktoś spotkał się z takim problemem to prosiłbym o pomoc.
tiraeth
Podaj kod php bo nikt nie wie jak Twoja pętla wygląda...
switch75
  1. <?php
  2. $slowa=file("slowa.txt");
  3. for($i=0;$i<sizeof($slowa);$i++)
  4. {
  5. $nazwa=$slowa[$i].".html";
  6. $strona=fopen($nazwa ,"w"); 
  7. ?>

}
nospor
gdybys zaraz, bo utworzeniu zmiennej $nazwa dał:
echo $nazwa.'<br />';
to bys wiedział w czym tkwi błąd. Nazwa tworzy ci sie razem z enterem, gdyż tak działa funkcja file()

musisz dac trim. pozatym jak jest fopen, dobrze by bylo, gdyby bylo fclose.
  1. <?php
  2. $slowa=file("slowa.txt");
  3. for($i=0;$i<sizeof($slowa);$i++)
  4. {
  5. $nazwa=trim($slowa[$i]).".html";
  6. $strona=fopen($nazwa ,"w");
  7. fclose($strona);
  8. }
  9.  
  10. ?>
switch75
Nospor wielkie dzięki. Zadziałało. smile.gif
Powiedz tylko dlaczego tworzył ostatni plik z listy ? (bo tego nie kumam)
nospor
Pisałem przecież. Pobierając wiersze z pliku za pomocą file(), dostawałeś we wszystkich wierszach, oprócz ostatniego, na koncu enter. No i poźniej kleciłes taką nazwę pliku z enterem po środku, gdyż dodawales jeszcze .html. No a pliki z enterami w nazwie nie można założyć, więc ci nie zakładał. A że ostatni wiersz w pliku nie zawierał entera, więc tylko on miał poprawną nazwę. Dla tego też uzyłem funkcji trim(), by skasować entery i inne białe znaki jesli były.

pozdro

ps: przenoszę na php Początkujący, gdyż tu jest miejsce tego topicu
tiraeth
Może obrazkowo Ci to pokażę smile.gif

plik.txt
Kod
nazwa1
nazwa2
nazwa3
nazwa4

Każda nazwa jest oddzielona znakiem nowej linii, tak?

Funkcja file pobiera plik i robi z jego zawartości tablicę eksplodując poprzez znak nowej linii, tak? Ale dodatkowo nie usuwa tego znaku nowej linii przez co, np. po:
  1. <?php
  2. $file = file('plik.txt');
  3. ?>

Tablice wyglądają tak:
Kod
Array
(
   [0] => 'nazwa1
',
   [1] => 'nazwa2
',
   [2] => 'nazwa3
',
   [3] => 'nazwa4'
)

Czyli do tej nazwy pliku dołączany jest znak nowej linii przez co właśnie powstaje ten enter po nazwie... a ostatnia nazwa pliku nie posiada nowej linii (bo jest ostatnią linią w pliku) i dlatego nie ma tego znaku na końcu, tak?

Mam nadzieję, że rozumiesz smile.gif
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.