Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wysyłanie pliku na serwer
Forum PHP.pl > Forum > Przedszkole
Dominbik
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 ?
grzemach
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ć.
erix
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.
Dominbik
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
erix
ftruncate
Dominbik
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
erix
Nie używasz tego w połączeniu z substr.

Otwierasz plik, podajesz jako parametr uchwyt i pożądaną długość w bajtach. winksmiley.jpg
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.