Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Fopen() i pętla for
switch75
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 13.09.2005

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
tiraeth
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Podaj kod php bo nikt nie wie jak Twoja pętla wygląda...
Go to the top of the page
+Quote Post
switch75
post
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 13.09.2005

Ostrzeżenie: (0%)
-----


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

}
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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. ?>
Go to the top of the page
+Quote Post
switch75
post
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 13.09.2005

Ostrzeżenie: (0%)
-----


Nospor wielkie dzięki. Zadziałało. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Powiedz tylko dlaczego tworzył ostatni plik z listy ? (bo tego nie kumam)
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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
Go to the top of the page
+Quote Post
tiraeth
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Może obrazkowo Ci to pokażę (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 15:11