Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Nazwa pliku po zmianie nazwy.
Forum PHP.pl > Forum > PHP
5w155
Witam!
Użyłem funkcji rename w następujący sposób:
  1. rename('../okladki/'.$_FILES['Plik']['name'], '../okladki/'.$id_p_1);

Chciałbym teraz wydobyć nazwę pliku po zmianie wraz z rozszrzeniem.
Jak to zrobić?
krowal
Zmienna $id_p_1 zawiera przecież nazwę pliku, co dokładnie chciałbyś osiągnąć ?
5w155
rozszerzenie.
krowal
Najprościej:
  1. <?php
  2. $fileData = explode('.', $id_p_1);
  3. if (isset($fileData[1])){
  4. echo 'rozszerzenie: '.$fileData[1];
  5. }else{
  6. echo 'brak rozszerzenia';
  7. }
  8. ?>

Edit: Zakładając, że plik zawsze składa się tylko z dwóch członów oddzielonych kropką winksmiley.jpg
5w155
To niestety mnie nie ustawia, bo zmienna $id_p_1 nie ma w sobie rozszerzenia. Tylko nazwę. Więc explode nie będzie tu rozwiązaniem.
Może da się jakoś wykorzystać $_FILE['Plik']['type'] ?

A explode'a po kropce mógłbym wykorzystać, bo nazwa będzie jednoczłonowa.
krowal
No to chcesz rozszerzenie czy 'mime type' ? bo z $_FILES['file']['type'] dostaniesz właśnie mime type czyli np 'image/gif'. Pamiętaj jednak, że nie jest to wartość generowana przez php a otrzymywana z przeglądarki przy uploadzie pliku. Dlatego np. typ .png może być inny jeśli uploadujesz przez FF i inny jeśli wrzucasz go przez IE (image/x-png albo image/png).
5w155
Chcę po prostu uzyskać rozszerzenie uploadowanego pliku. Koniec.

EDIT: Dobra. Załatwiłem to dość łopatologicznie. W razie znajdę inne rozwiązanie to zastosuję. Po prostu robie explode'a na $_FILE['Plik']['name'] i stamtąd biorę rozszerzenie i dopisuję do $id_p_1. Troche lipa... ale działa smile.gif REP dla Ciebie!
krowal
Możesz jeszcze użyć explode na $_FILES['file']['name'].

edit: jw. spóźniłem się smile.gif
thek
Ja bym nieco uważał przy explode i po takim działaniu użył array_pop sprawdzając co zwraca. Pliki mogą, jak sam wiesz zapewne, mieć w nazwie wiele kropek, lub wcale, a nas interesuje ostatni człon. Poza tym w razie wywołania popa na pliku bez rozszerzenia wywali nam nazwę pliku smile.gif
Czyli:
  1. if ( ($rozszerzenie = array_pop( explode( '.', $_FILES['file']['name'] ) ) ) != $_FILES['file']['name'] )
  2. echo 'To plik o rozszerzeniu: '.$rozszerzenie;
  3. else
  4. echo 'Błąd! Ten plik nie ma rozszerzenia';
Crozin
Yyy... polecam manual: pathinfo
Fifi209
Cytat(thek @ 24.08.2009, 16:58:20 ) *
Ja bym nieco uważał przy explode i po takim działaniu użył array_pop sprawdzając co zwraca. Pliki mogą, jak sam wiesz zapewne, mieć w nazwie wiele kropek, lub wcale, a nas interesuje ostatni człon. Poza tym w razie wywołania popa na pliku bez rozszerzenia wywali nam nazwę pliku smile.gif
Czyli:
  1. if ( ($rozszerzenie = array_pop( explode( '.', $_FILES['file']['name'] ) ) ) != $_FILES['file']['name'] )
  2. echo 'To plik o rozszerzeniu: '.$rozszerzenie;
  3. else
  4. echo 'Błąd! Ten plik nie ma rozszerzenia';


nie prościej:
  1. $rozszerzenie = end(explode('.', $_FILES['file']['name']));

?

Poza tym jest funkcja, o której mówił przedmówca stworzona właśnie do tego celu...
thek
Pathinfo najlepsze.
Fifi... pop i end zadziałają identycznie smile.gif End ustawia wskaźnik na ostatni element i zwraca go. Pop usuwa ostatni element i zwraca go :] Ja dodałem if dodatkowy by zwyczajnie poinformować usera co mu zwracamy. Zauważ bowiem, że Ty zwrócisz nazwę pliku jeśli nie ma on rozszerzenia, a ja ifem jeszcze sprawdzam czy aby nie mamy sytuacji, że ktoś przesłal plik bez rozszerzenia w nazwie. Ale równie dobrze można POP zastąpić END w moim przykładzie i efekt będzie identyczny. W tym przypadku obie funkcje mogą się wzajemnie zastępować. Gdybyśmy bez tego IF zostawili, to dla pliku "shadow" $rozszerzenie miała by wartość "shadow", ale z IFem wywali, że plik nie ma rozszerzenia smile.gif A pliki bez rozszerzenia są powszechne na linuxie dla przykładu, bo on ich zwyczajnie nie potrzebuje. Nie samym windowsem żyje świat. Poza tym coś takiego jak "nie ufaj danym przesłanym przez usera" jest zawsze prawdziwe. A nazwa pliku też jest daną z forma i trzeba na nią zwracać uwagę 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.