Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Wysyłanie pliku na serwer, jak ograniczyć typy plików ?
Dominbik
post 22.02.2010, 15:10:13
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 22.02.2010

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


Witam wszystkich na forum (to mój pierwszy post na forum) !
Dopiero się uczę można powiedzieć kaleczę, mam taki ot formularz do wysyłania plików na serwer. I chciałbym ograniczyć możliwość wysyłania plików tylko do konkretnych typów np. .txt .jpe .jpeg .mp3 i moje pytanie jak to zrobic ?
Pozdrawiam i dziękuje za dop

  1. <form action="send.php" method="post" enctype="multipart/form-data">
  2. Wprowadź nazwę pliku: <input type="file" name="plik">
  3. <br><input type="submit" value="prześlij">
  4. </form>
  5.  
  6. <?php
  7. $file = $HTTP_POST_FILES["plik"]["tmp_name"];
  8. $zapisz_jako = $HTTP_POST_FILES["plik"]["name"];
  9.  
  10. if (!copy($file, $zapisz_jako)) {
  11.  
  12. print ("Kopiowanie pliku nie powiodło się...<br>\n");
  13.  
  14. }
  15.  
  16. print "<BR>Nazwa pliku: ".$HTTP_POST_FILES["plik"]["name"];
  17.  
  18. print "<BR>Rozmiar pliku: ".$HTTP_POST_FILES["plik"]["size"];
  19.  
  20. print "<BR>tymczasowo: ".$HTTP_POST_FILES["plik"]["tmp_name"];
  21.  
  22. print "<BR>Typ przesłanego pliku: ".$HTTP_POST_FILES["plik"]["type"];
  23.  
  24. ?>


EDIT: chodzi mi o jak najprostsze zabezpieczenie, mile widziane też przed jakieś trudniejsze (np. w przypadku zmiany rozszerzenia). a i gdzie tutaj mógłbym sobie ustawić ścieżkę gdzie by to się zapisywało ?

Ten post edytował Dominbik 22.02.2010, 15:14:21
Go to the top of the page
+Quote Post
grzemach
post 22.02.2010, 15:14:51
Post #2





Grupa: Zarejestrowani
Postów: 121
Pomógł: 4
Dołączył: 9.06.2007
Skąd: Kielce

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


musisz sprawdzać mime-type, jak to zrobić pewnie się zapytasz? Polecam zmienną $_FILES['plik']['type'] - pokaże Ci mime type wrzucanego pliku, a to już o krok od
Kod
if($_FILES['plik']['type']=='text/plain'){
echo 'plik tekstowy';
}else{
echo 'nie jest to plik tekstowy';
}


pozostałe pliki musisz sam poszukać mimetypów, wrzucasz do formularza echo i Ci będzie się pokazywało.
obrazki to będą przykładowo: 'image/png','image/gif','image/jpeg','image/pjpeg';

to jest najlepsze rozwiązanie, bo rozszerzenia można bardzo łatwo oszukać, a to jest faktyczny typ pliku. tzn to też można oszukać, ale nie ma to sensu bo nie da się to wykorzystać.

Ten post edytował grzemach 22.02.2010, 15:17:33


--------------------
Go to the top of the page
+Quote Post
erix
post 22.02.2010, 19:00:51
Post #3





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
to jest najlepsze rozwiązanie, bo rozszerzenia można bardzo łatwo oszukać, a to jest faktyczny typ pliku. tzn to też można oszukać, ale nie ma to sensu bo nie da się to wykorzystać.

Akurat. MIME przesyłane przez $_FILES pochodzi od przeglądarki.

Najpewniejsze jest wykonanie file -bi plik po stronie serwera i odczytanie prawdziwego MIME.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
Dominbik
post 23.02.2010, 11:11:28
Post #4





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 22.02.2010

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


dobra, dzięki wielkie. jutro postaram się to zrobić tak jak powiedzieliście pomogę sobie jeszcze jakimiś zew. źródłami jak będę miał jakieś problemy to się tutaj (dlatego jeszczee nie zamykajcie) zapytam. wystarczy mi takie srednie zabezpieczenie.

A mam takie małe pytanko (może trochę odbiega od tematu) ale wydaje mi się że banalne:

mam zmienną która zawiera taki znak jaki zawiera i potem mam dalszą cześć skryptu która dopisuje to do txt
$ttak = "|";

chciałbym teraz to zmienić (wykorzystując ASCII ?) aby
$ttak usuwało jeden znak wstecz. kod backspace 8

a jak w taki sposob nie mozna (np. $ttak = 8) to jak inaczej mógłbym to zrobić ?
pozdrawiam (dopiero raczkuje)
------------------------------------------------------------------------------------------------------------------
EDIT:

o ile w c++ da się tak robić to tutaj chyba nie (przed chwila probowale $ttak = 8; albo '8' czy "8" i nic.
A zna ktoś jakiś inny prosty sposob na usuwanie jednego znaku wstecz ?

pozdrawiam worriedsmiley.gif

Ten post edytował Dominbik 23.02.2010, 11:11:55
Go to the top of the page
+Quote Post
erix
post 23.02.2010, 14:25:46
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




ftruncate


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
Dominbik
post 23.02.2010, 15:39:55
Post #6





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 22.02.2010

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


Cytat(erix @ 23.02.2010, 14:25:46 ) *


if($wynik == 5){


$fp = fopen($filet, "a");
flock($fp, 2);
fwrite($fp, $ttak);
flock($fp, 3);
fclose($fp);

}
substr ($filet , 2 ); i gdzie to teraz wsadzić żeby od txt ($filet) usuwalo ostatni albo pierwszy (bez roznicy) tylko jeden znak ?

(nie wiem też czy wsadzając w ten nawias substr (xxx, 2) zmienna $filet dobrze komibnuje... worriedsmiley.gif
pozdrawiam
Go to the top of the page
+Quote Post
erix
post 23.02.2010, 18:14:26
Post #7





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Nie używasz tego w połączeniu z substr.

Otwierasz plik, podajesz jako parametr uchwyt i pożądaną długość w bajtach. winksmiley.jpg


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 7.07.2025 - 11:39