Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wysyłanie pliku na serwer - ustawianie własnej nazwy
Forum PHP.pl > Forum > PHP
franz87
Witam,w książce o php znalazłem taki skrypt:

$uploaddir = 'Images/';
if(move_uploaded_file($_FILES['plik_1']['tmp_name'], $uploaddir.$_FILES['plik_1']['name'])){
print "Plik został załadowany.\n";
}
else{
print "Plik nie został załadowany\n";
}

pozwala on przesyłać pliki na serwer.
Wszystko ładnie działa pliki rzeczywiście się przesyłają,ale jest mały problem.
Chciałbym,żeby plik zawsze nazywał się $nazwa_pliku
(ta zmienna za każdym razem będzie inna...)
Nie wiem jak zmienić powyższy kod,żeby własnie plik wysłany do serwera miał nazwę określoną w zmiennej $nazwa_pliku.
Jeżeli ktoś wie jak zmodyfikować powyższy kod to proszę o odpowiedź.

Dzięki i pzdr
Fifi209
A jak próbowałeś kolego?

To nie jest dział gotowce.
franz87
Witam kolego smile.gif
A więc próbowałem na różne sposoby (php znam słabo)

['plik_1']
['tmp_name']
['name']

tu próbowałem zamienić wyraz na moją zmienną.
Pomożecie?questionmark.gif
Fifi209
To:
  1. $_FILES['plik_1']['name']

potraktuj pathinfo (w dokumentacji wszystko jest z przykładami)
A zrobisz to po to, aby uzyskać rozszerzenie. Potem kłania się łączenie stringów.
franz87
Nie ogarniam tego :/
Ten skrypt jest mi potrzebny do własnej strony,którą prowadzę.
Php znam w podstawie-a i to za dużo powiedziane.
Udało mi się połączyć zmienną z nazwą,ale ja chce żeby plik
nazywał się jak zmienna...
Blame
No dobra, trochę ci to wyjaśnię. Twój skrypt:
  1. $uploaddir = 'Images/';
  2. if(move_uploaded_file($_FILES['plik_1']['tmp_name'], $uploaddir.$_FILES['plik_1']['name'])){
  3. print "Plik został załadowany.\n";
  4. }
  5. else{
  6. print "Plik nie został załadowany\n";
  7. }

To:
  1. $_FILES['plik_1']['tmp_name']

Jest to plik tymczasowy, który zauploadowałeś ze swojego komputera poprzez formularz.
A to:
  1. $uploaddir.$_FILES['plik_1']['name']

Jest to bezwzględna ścieżka do pliku, który zostanie zapisany.
Czyli tak jak mówił fifi209 potraktuj to pierwsze funkcją pathinfo, czyli na przykład:
  1. $rozszerzenie=pathinfo($_FILES['plik_1']['tmp_name']);
  2. $rozszerzenie=$rozszerzenie['extension']; //tu masz rozszerzenie tego pliku.


Teraz wystarczy to wszystko zlepić czyli:
  1. $przeznaczenie=$uploaddir.$twoja_nazwa.$rozszerzenie;

i woila!
franz87
Dzięki wszystko działa,ale nie wiem czemu pliki zapisują się bez rozszerzenie?questionmark.gif?

$rozszerzenie=pathinfo($_FILES['plik_1']['tmp_name']);
$rozszerzenie=$rozszerzenie['jpg']; ///// tu daje jako rozszerzenie jpg
$uploaddir = 'Images/';
$twoja_nazwa = 'piotr';
$przeznaczenie=$uploaddir.$twoja_nazwa.$rozszerzenie;


if(move_uploaded_file($_FILES['plik_1']['tmp_name'],$przeznaczenie)){
print "Plik został załadowany.\n";
}
else{
print "Plik nie został załadowany\n";
}

questionmark.gif
deha21
Nie zmieniaj nic w tym zapisie:
  1. $rozszerzenie=$rozszerzenie['extension'];

To odczytuje jakie jest aktualne rozszerzenie pliku więc ręcznie nie musisz go wprowadzać, skrypt sam sobie wykryje i wpisze odpowiednie. Zmień to i powinno działać.
franz87
Jak mam tak jak ty napisałeś to też plik nie ma rozszerzenia.Wstawie może cały kod:

$rozszerzenie=pathinfo($_FILES['plik_1']['tmp_name']);
$rozszerzenie=$rozszerzenie['extension'];
$uploaddir = 'Images/';
$przeznaczenie=$uploaddir.$numer_pliku.$rozszerzenie;


if(move_uploaded_file($_FILES['plik_1']['tmp_name'],$przeznaczenie)){
print "Plik został załadowany.\n";
}
else{
print "Plik nie został załadowany\n";
}
deha21
Jak wygląda zmienna $numer_pliku? Nie wpisuje ci czasem rozszerzenia w nazwie ale bez kropki - np. Images/nazwajpg?
  1. $info=pathinfo($_FILES['plik_1']['tmp_name']);
  2. $rozszerzenie=$info['extension'];
  3. $uploaddir = 'Images/';
  4. $przeznaczenie=$uploaddir.$numer_pliku."."$rozszerzenie;
franz87
$numer_pliku to cyfra.

$przeznaczenie=$uploaddir.$numer_pliku."."$rozszerzenie;
Ta linijkę kodu wypluwa mi jako błąd

Gdy zamienie ją na
$przeznaczenie=$uploaddir.$numer_pliku.$rozszerzenie;
to powstaje plik np 1tmp
poprostu do nazwy dodaje tmp

questionmark.gif

PS
Jak mam taki skrypt
$rozszerzenie=pathinfo($_FILES['plik_1']['tmp_name']);
$rozszerzenie=$rozszerzenie['extension'];
$uploaddir = 'Images/';
$przeznaczenie=$uploaddir.$numer_pliku.$rozszerzenie;

to dodaje tmp do nazwy

Dobra już działa

$przeznaczenie=$uploaddir.$numer_pliku.$rozszerzenie.$kropka.'jpg';

A macie jakiś pomysł jak zrobić ograniczanie wrzucania plików do np 3MB??
Blame
Cytat(franz87 @ 15.11.2009, 18:07:04 ) *
Dobra już działa

$przeznaczenie=$uploaddir.$numer_pliku.$rozszerzenie.$kropka.'jpg';

oO I teraz zapisuje ci plik jako np. plikjpg.jpg? Powinno być
$przeznaczenie=$uploaddir.$numer_pliku.'.'.$rozszerzenie;
Cytat(franz87 @ 15.11.2009, 18:07:04 ) *
A macie jakiś pomysł jak zrobić ograniczanie wrzucania plików do np 3MB??

Sprawdzasz sobie czy $_FILES['plik1']['size'] jest mniejsze od 3145728 (3*1024*1024), jeśli tak to wysyłasz, jeśli nie dajesz komunikat.
franz87
$przeznaczenie=$uploaddir.$numer_pliku.$rozszerzenie.$kropka.'jpg';

Tak ten kod działa,równie dobrze mógłbym napisać

$kropka = ".";
$przeznaczenie=$uploaddir.$numer_pliku.$kropka.'jpg';

i też by działał bo $rozszerzenie nie działa wogóle.
Teraz elegancko zapisuje sie w folderze $uploaddir
plik o nazwie numer_pliku.jpg


A sprawdzanie wielkości już zrobiłem-jakoś do tego doszłem haha.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.