Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Tworzenie pliku w każdym katalogu
Forum PHP.pl > Forum > Przedszkole
mrRosso
Witam mam katalog /baza_txt w którym tworzone są inne katalogi o różnej nazwie a w nich plik txt o nazwie daty każdego dnia, czyli o północy tworzony jest nowy plik txt. Mam taki problem, a rozwiąznia w googlarce nie znalazłem.

Przypuśćmy, że mam w katalogu "baza_txt" następujące foldery:

jdfsfg/
dsfqw/
fysiw/
afydfd/
suadf
afdfe/

etc...

i szukam funkcji, która będzie mi tworzyć plik txt o nazwie daty w każdym z tych katalogów, czyli żeby bo utworzeniu wyglądało to w następujący sposób:

baza_txt/jdfsfg/13-03-2013.txt
baza_txt/dsfqw/13-03-2013.txt
baza_txt/fysiw/13-03-2013.txt
baza_txt/afydfd/13-03-2013.txt
baza_txt/suadf13-03-2013.txt
baza_txt/afdfe/13-03-2013.txt

etc...

umiem zrobić, żeby tworzyło w pojedyńczym katalogu nazwie jaką podam, ale z wieloma katalogami jest problem bo każda nazwa jest inna...



Może ułatwieniem by było dla Was. Bo Przy tworzeniu tych folderów o dziwnych nazwach zrobiłem zapisywanie ich nazwy do bazy MySQL, może to w czymść pomoże, żeby jakoś wyodrębnić nazwy katalogów z bazy.
Posio
powiem Ci tak, jeśli lista folderów jest stała tj. znasz nazwy wszystkich folderów to po prostu stwórz z nich tablicę i w pętli twórz te pliki co chcesz ?
Nie wiem czy Cię dobrze zrozumiałem ale mysle ze zrobić to pętlą idzie bez problemu
mrRosso
no właśnie tu jest ten kłopot, że lista nie jest stała smile.gif
Wazniak96
Sprawdzasz jakie pliki(katalog możemy również nazwać plikiem) w katalogu baza_txt i mamy listę katalogów(o ile w katalogu baza_txt są tylko katalogi)scandir. Następnie pętlą jedziemy każdy jeden folder z osobna i dodajemy w nim plik.
_Borys_
A od czego to zależy ?
magnus
Cytat(mrRosso @ 13.03.2013, 17:37:18 ) *
umiem zrobić, żeby tworzyło w pojedyńczym katalogu nazwie jaką podam


Skoro umiesz zrobić plik w jednym katalogu, to wystarczy to powtórzyć w pętli wink.gif
Skoro masz te nazwy w bazie, to odczytaj je do tablicy, przeleć foreach() i będzie po sprawie.

A gdybyś chciał odczytać wszystkie katalogi to mniej więcej taka konstrukcja wyciągnie wszystkie katalogi z podanego katalogu:

  1.  
  2. $handle = opendir($dir);
  3.  
  4. while (false !== ($file = readdir($handle))) {
  5.  
  6. if ($file != "."
  7. && $file != ".."
  8. && filetype($dir.$file) == 'dir'
  9. ) {
  10. //tu coś robisz
  11. }
mrRosso
Jest to czat kanałowy i każdy użytkownik, który się zarejestruje może utworzyć swój własny kanał rozmowy o nazwie którą poda ;p Po utworzeniu jego kanału tworzony jest folder o jego nazwie a w nim plik txt z logami smile.gif
Wazniak96
Tak się składa, że jestem autorem skryptu czatu kanałowego(może znasz, Wazniak) i powiem Ci tyle, że logi na txt to nie wypał. Dużo zabawy gdy chcemy czytać np 10 ostatnich wiadomości. Problem z zabezpieczeniem przed nieautoryzowanym dostępem. Znacznie lepiej jest zrobić je na MySQL.

Jeżeli już chcesz zrobić na txt to przed zapisem sprawdź czy plik txt już istnieje, jeżeli nie to po prostu go stwórz smile.gif
_Borys_
Należałoby przypisać do użytkownika folder
Gdzieś w pliku użytkownik - folder
mrRosso
A jeśli wyciągnę listę katalogów to przecież każdy katalog musi mieć swoją zmienną, czy jak to jest?

załóżmy tworzę plik w katalogu

  1. $log_data=date("d.m.y");
  2. $fp = fopen("baza_txt/logi/".$jaka_zmienna."/".$log_data.".txt", "w");
  3. fclose($fp);
  4. if( chmod ( './baza_txt/logi/' . $jaka_zmienna. '/' . $log_data.'.txt', 0600))


i jako $jaka_zmienna co mam podać aby dotyczyło to każdego katalogu?

Wazniak a kojarzę Cię smile.gif jak chcesz to podaj mi na pw numer Twojej kanałówki smile.gif
Wazniak96
wszystko ci podaliśmy

  1. <?php
  2. $log_data=date("d.m.y");
  3. while($dir = scandir('baza_txt/logi'))
  4. {
  5. if($dir != '..' && $dir != '.')
  6. {
  7. $fp = fopen("baza_txt/logi/".$dir."/$log_data.txt", "w");
  8. fclose($fp);
  9. if( chmod ( './baza_txt/logi/' . $dir. '/' . $log_data.'.txt', 0600))
  10. }
  11. }
mrRosso
coś jest nie tak bo gdy wywołuję skrypt przez przeglądarkę to wyrzuca błąd prezglądarki, że nie ma takiego pliku. Klamry są dobre...
Wazniak96
I tak sporo dostałeś. Poza tym w czym Ci możemy pomóc skoro nie wiemy jak wygląda twoje drzewo katalogów, z którego katalogu wykonujesz skrypt i nie mamy treści błędu. Czarodziejami nie jesteśmy.
mrRosso
Dzewo katalogów opisywałem przecież ;P katalog główny to "czat/"
W nim są katalogi i skrypty: "API, baza_txt, czat.php i test.php(i to właśnie z niego sprawdzam czy działa ten kod)" i tylko to. Adres http który wpisuję jest na 100% poprawny smile.gif

ostatni wpis z pliku error.log to:

  1. Wed Mar 13 18:17:58 2013] [error] [client 83.26.229.182] File does not exist: /vhome/s/sniper/www/htdocs/favicon.ico, referer: <a href="http://sniper.onuse.pl/czat/test.php" target="_blank">http://sniper.onuse.pl/czat/test.php</a>
Wazniak96
Podany kod wskazuje na to, że nie możne znaleźć obrazka, ikony która widnieje przy zakładce w przeglądarce... Wysil się trochę. Sprawdź co ci zwraca katalogi scandir itp.

PS: Jeżeli chcesz cokolwiek zrobić musisz włączyć raportowanie błędów ponieważ na onuse jest ono standardowo wyłączone, przez co ciężko się pracuje.
mrRosso
użyłem z manula tego kodu

  1. <?php
  2.  
  3. if ($handle = opendir('/vhome/s/sniper/www/htdocs/czat/baza_txt/logi')) {
  4. echo "Directory handle: $handle\n";
  5. echo "Entries:\n";
  6.  
  7. * This is the correct way to loop over the directory. */
  8. while (false !== ($entry = readdir($handle))) {
  9. echo "$entry\n\r\n";
  10. }
  11.  
  12. /* This is the WRONG way to loop over the directory. */
  13. while ($entry = readdir($handle)) {
  14. echo "$entry\n\r\n";
  15. }
  16.  
  17. closedir($handle);
  18. }
  19. ?>


i zwrcił mi listę katalogów w taki sposób:

  1. Directory handle: Resource id #2 Entries: . .. wciwnqj diwiwuyagq jdizjwuqihs khshau andkdkdk test2\


czyli prawie ok, tylko żeby utworzyć tam pliki txt
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.