Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: mkdir() nie dziala jak nalezy
Forum PHP.pl > Forum > Przedszkole
boocheck
mam nastepujacy problem, mam konto ftp, na nim robie stronke i m.in.
dzial 'download'. w skrypcie mam kod tworzacy sobie folder a w nim
jeszcze jeden. jasnym jest ze zeby skrypt mogl stworzyc folder musi miec
uprawnienia 'write', wiec tworze folder download z chmodem 0777 za pomoca
clienta ftp [total commander]. w nim zamieszczam skrypt tej postaci

  1. <?
  2. mkdir("./pierwszyfolder" , 0777);
  3. mkdir("./pierwszyfolder/drugifolder" , 0777);
  4.  
  5. /*tutaj jest przetestowany fragment skryptu upload'ujacego pliki na serw, 
  6. ktory w normalnych warunkach dziala oraz inne mniej wazne komendy, ktore 
  7. nie ogrywaja roli*/
  8. ?>


jest to fragment panelu administracyjnego. rezultatem odpalenia skryptu
jest utworzenie folderu 'pierwszyfolder' w katalogu 'download' i ... nic
wiecej. wbrew moim oczekiwaniom nie powstaje w 'pierwszymfolderze' nowy
katalog 'drugifolder' mimo, ze gdy sprawdzam przez klienta ftp
wlasciwosci katalogu 'pierwszyfolder' to widze uprawnienia 0777. pomijam
kwestie bezpieczenstwa - zdaje sobie sprawe ze folder z takimi
uprawnieniami tworzy zagrozenie, strona jednak bedzie malutka stronka,
ktora nie powinna stawac sie celem atakow.
w skrocie moje pytanie brzmi: co trzeba zrobic aby skrypt mogl stworzyc
folder, a w nim kolejny, jakie musza byc uprawnienia i jak je nadac
skryptowi

jesli taki temat mial juz miejsce na forum to prosze o linka - ja nie znalazlem

pozdrawiam i licze na wasza pomoc
cadavre
Do tworzenia folderów na FTP służy funkcja ftp_mkdir.
crash
Dziwne, że u mnie tworzą się oba katalogi... A próbowałeś:
  1. <?php
  2. if( mkdir( './pierwszyfolder' , 0777) )
  3. {
  4.  mkdir( './pierwszyfolder/drugifolder' , 0777);
  5. }
  6. ?>
mike
Panowie, a może byście zwrócili uwagę na oppcjonalne paramerty. Takie jak rekursywność.
boocheck
zatem, kod

  1. <?
  2.  
  3. if(mkdir( './pierwszyfolder' , 0777) )
  4. {
  5.  mkdir( './pierwszyfolder/drugifolder' , 0777);
  6. }
  7.  
  8. ?>


daje ten sam rezultat co moj skrypt [jeden folder]

napisalem jeszcze cos takiego


  1. <?
  2.  
  3. $ftp_server="mojserwer.pl";
  4. $ftp_user_name="mojuser";
  5. $ftp_user_pass="mojehaslo";
  6. $conn_id = ftp_connect($ftp_server);
  7. $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
  8.  
  9.  ftp_mkdir($conn_id , "./pierwszyfolder");
  10. ftp_mkdir($conn_id , "./pierwszyfolder/drugifolder");
  11.  
  12. ?>


i nic sie nie dzieje, skrypt odpalony nie tworzy nawet pierwszego katalogu
na moim serwie nie mokazywane sa bledy, tylko w przypadku jakis error'ow wyswietla sie biala strona. wiec byc moze ten skrypt zawiera tego typu bledy - ja ich nie znalazlem

a co do pana 'mike_mech', ma pan moze jakies materialy na ten temat po polsku?
te nie za wiele mi mowia php.net

jesli tak to prosze o link
mike
Cytat(boocheck @ 2005-12-30 11:34:31)
a co do pana 'mike_mech', ma pan moze jakies materialy na ten temat po polsku?

1. Na Pana trzeba mieć ze 100Ha i dwie wsie pod sobą laugh.gif
2. Przecież sam podaleś link, który jest po polsku tongue.gif Manual do funkcji mkdir() jest po polsku.

A chodzi o to że zamiast:
  1. <?
  2.  
  3. if(mkdir( './pierwszyfolder' , 0777) )
  4. {
  5.  mkdir( './pierwszyfolder/drugifolder' , 0777 );
  6. }
  7.  
  8. ?>

.. możesz:
  1. <?
  2.  
  3. mkdir( './pierwszyfolder/drugifolder' , 0777, true );
  4.  
  5. ?>


Tylko Uwaga!:
Cytat
Notatka:  Parametr rekursywność został dodany w php 5.0.0.
boocheck
na serwerze na ktorym pracuje mam niestety starsze php wiec nici z tego sposobu.

przydatnym moze okazac sie, ze zauwazylem fakt, ze skrypty maja 'realne' prawo do zapisu w folderach, ktore robilem recznie przez klienta

mam prosty skrypt, tworzacy plik *.txt z jakas tam trescia w srodku. kiedy zmienna ktora zawiera sciezke jest postaci ./folder_ktory_stworzylem_na_sztywno/nazwa_pliku_txt
plik powstaje, kiedy sprawa wyglada tak
./folder_ktory_wczesniej_stworzyl_skrypt/nazwa_pliku_txt
jak pewnie latwo sie domyslic nie tworzy pliku

moral jest zatem [chyba] taki ze nie wiedziec czemu skrypt nie moze zapisywac do folderow ktore sam tworzyl a nie ma problemow w zapisie do folderow sworzonych przeze mnie w client'cie ftp. tak jakby cos nie tak z owner'em, kiedy apache jest ownerem nie ma praw zapisu, czyli niby jakos tak 0077, kiedy jednak sprawdze uprwanienia widze 0777

probowalem zastosowac takie cos na katalogu utworzonym przez skrypt
chown("sciezka" , przemas);

(przemas to moj user na tym serwerze)

i...nic

byly tez proby typu
chmod("sciezka" , 0777);
...z tym samym efektem
hwao
  1. <?php
  2.  
  3. mkDirPlus( $sDir ) {
  4.  do {
  5. $dir = $working_directory;
  6.  
  7. while (!@mkdir($dir,0777)) {
  8. $dir = dirname($dir); 
  9.  
  10. if ($dir == '/' || is_dir($dir))
  11. break;
  12. }
  13.  } while ($dir != $working_directory);
  14. }
  15.  
  16. mkDirPlus( '/path/to/my/work' );
  17.  
  18. ?>
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.