Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Niedozwolone Rozszerzenia
Forum PHP.pl > Forum > PHP
Sebaso
witam zrobilem sobie upload :

Kod
$name= 'upload'; // Nazwa pliku bez .php
?><html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-2" />
<title>Upload Plików!</title>
<script type="text/javascript">

</script>
</head>
<body bgcolor="#000000">
<br><br><br><br><br><br><br><br>
<center>
<h2><font color="#FFFFFF"><b>Upload !</font></b></h2>
<div>
<form enctype="multipart/form-data" action="<?php echo $name; ?>.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="50000" />
<input name="plik" accept="*.pwn,*.amx,*.jpg,*.gif,*.map,*.png" type="file" />
<input type="submit" value="Wy¶lij plik" />
</form>
</div>
<center>
<?php
$plik_tmp = $_FILES['plik']['tmp_name'];
$plik_nazwa = $_FILES['plik']['name'];
$plik_rozmiar = $_FILES['plik']['size'];
$domain= 'http://www.gtaforum.xaa.pl'; // adres strony z http:// i www. ale bez uko¶nika na końcu
$katalog= 'upload'; // katalog w którym maj± znajdować się pliki do zapisu. Pamietaj katalog musi posiadać CHMD 777
$rozszerzenie = $_FILES['plik']['type'];

if ($rozszerzenie !== 'php')
{
if(is_uploaded_file($plik_tmp)) {
    move_uploaded_file($plik_tmp, "$katalog/$plik_nazwa");
   echo "<font color=\"#FF0000\"><center>Plik: <strong>$plik_nazwa</strong> o rozmiarze
   <strong>$plik_rozmiar bajtów</strong> został przesłany na serwer!</font></center><br>
       <tr><td><font size=\"2\" color=\"#FFFFFF\">URL: </font></td><td><input type='text' name='thetext' onClick='highlight(this);' size='30' value='$domain/$katalog/$plik_nazwa'></td></tr><br>
       <tr><td><font size=\"2\" color=\"#FFFFFF\">HTML: </font></td><td><input type='text' name='thetext' onClick='highlight(this);' size='30' value='<a href=$domain/$katalog/$plik_nazwa>$plik_nazwa</a>'></td></tr><br>";

} }
else {
echo '<font color=red>błędne rozszerzenie</font>';
}
?>
<br><font size="2" color="#FFFFFF">Stworzeone przez</font> <font  size="2" color="#FF0000"><a href="http://www.gtaforum.y0.pl/">Sebaso</a></font> <font  size="2" color="#FFFFFF">dla gtaforum.y0.pl</font>
</body>
</html>


Lecz niestety nie dziala gdy wsadze php pisze ze plik costam.php o rozmiarze 0 b zostal wyslany na serwer a wogole nie zostal i tak samo z innymi rozszerzeniami tylko ze poprostu strona jakby sie tylko odswieza
Zyx
Od kiedy to $_FILES['plik']['tmp_name'] przechowuje rozszerzenie pliku? Rozszerzenie możesz sobie sam wyciągnąć funkcją pathinfo() z $_FILES['plik']['name'] albo sprawdzać typ MIME w $_FILES['plik']['type']. Jednak oba sposoby są niepewne, ponieważ pierwszy bazuje na rozszerzeniu pliku (podczas gdy de facto może on zawierać cokolwiek), a drugie nie jest weryfikowane w żaden sposób przez PHP.

PS. "Nie" z czasownikami piszemy oddzielnie.
Spawnm
a exe pozwolisz ?
daj tablicę z dozwolonymi typami mime .
i jak już było pisane $_FILES['plik']['tmp_name'] nie przechowuje typu mime
Sebaso
czyli to tak będzie wyglądało questionmark.gif

  1. <?php
  2. $plik_tmp = $_FILES['plik']['tmp_name'];
  3. $plik_nazwa = $_FILES['plik']['name'];
  4. $plik_rozmiar = $_FILES['plik']['size'];
  5. $rozszerzenie = $_FILES['plik']['type']
  6.  
  7. if ($rozszerzenie !== 'php')
  8. {
  9. if(is_uploaded_file($plik_tmp)) {
  10.     move_uploaded_file($plik_tmp, "$katalog/$plik_nazwa");
  11.    echo "<font color=\"#FF0000\"><center>Plik: <strong>$plik_nazwa</strong> o rozmiarze
  12.    <strong>$plik_rozmiar bajtów</strong> został przesłany na serwer!</font></center><br>
  13.        <tr><td><font size=\"2\" color=\"#FFFFFF\">URL: </font></td><td><input type='text' name='thetext' onClick='highlight(this);' size='30' value='$domain/$katalog/$plik_nazwa'></td></tr><br>
  14.        <tr><td><font size=\"2\" color=\"#FFFFFF\">HTML: </font></td><td><input type='text' name='thetext' onClick='highlight(this);' size='30' value='<a href=$domain/$katalog/$plik_nazwa>$plik_nazwa</a>'></td></tr><br>";
  15.  
  16. } }
  17.  else {
  18. echo '<font color=red>błędne rozszerzenie</font>';
  19. }
  20. ?>


tak questionmark.gif
Zyx
$_FILES['plik']['type'] przechowuje typ MIME pliku, a nie rozszerzenie. Nie wiem, jaki konkretnie typ MIME jest przypisany do PHP, ale to można łatwo sobie sprawdzić w Google (list of mime types) i podobnie jak zauważył Spawnm, ze względów bezpieczeństwa sprawdzaj raczej, czy rozszerzenie jest dozwolone, a nie czy jest niedozwolone.
Sebaso
ale jak to zrobic ?
lashus
tongue.gif Normalnie, pobierasz typ mime przez: $_FILES['plik']['type'], następnie porównujesz go z typami mime dopuszczanymi przez twój upload, powiedzmy tablica zbudowana w formie:

Kod
$tablica[] = 'mimetype (np. image/png dla obrazka o rozsz. png jeśli dobrze pamiętam)';


i jeśli znajdzie ci trafienie tablicy z typem kontynuujesz skrypt, jeśli nie - przerywasz go i zwracasz komunikat.

Kod
if(array_search($_FILES['plik']['type'], $tablica) != false) {
   // instrukcje wykonywane jesli rozszerzenie jest dopuszczalne
} else {
   // instrukcje wykonywanie jesli rozszerzenie nie jest dopuszczalne
}


Inną z kolei bardziej prymitywną metodą jest rozbijanie pliku na części z kropką przez funkcję explode:

Kod
$rozszerzenie = end(explode('.', $_FILES['plik']['name']));

// $dopuszczalne = lista z rozszerzeniami (bez kropek!) np. png, jpg, txt

if(array_search($rozszerzenie, $dopuszczalne) != false) {
   // instrukcje wykonywane jesli rozszerzenie jest dopuszczalne
} else {
   // instrukcje wykonywanie jesli rozszerzenie nie jest dopuszczalne
}
Sebaso
jest problem bo else od razu wyskakuje zobacz http://www.upload.gtainpawno.pl/ moj kod
a poza tym upload nie dziala wogole
Kod
$tablica[] = 'mimetype (image/png)';

if(array_search($_FILES['plik']['type'], $tablica) != false) {
      move_uploaded_file($plik_tmp, "$katalog/$plik_nazwa");
     echo "<font color=\"#FF0000\"><center>Plik: <strong>$plik_nazwa</strong> o rozmiarze
     <strong>$plik_rozmiar bajtów</strong> został przesłany na serwer!</font></center><br>
         <tr><td><font size=\"2\" color=\"#FFFFFF\">URL: </font></td><td><input type='text' name='thetext' onClick='highlight(this);' size='30' value='$domain/$katalog/$plik_nazwa'></td></tr><br>
         <tr><td><font size=\"2\" color=\"#FFFFFF\">HTML: </font></td><td><input type='text' name='thetext' onClick='highlight(this);' size='30' value='<a href=$domain/$katalog/$plik_nazwa>$plik_nazwa</a>'></td></tr><br>";
  
} else {
echo '<font color=red>błędne rozszerzenie</font>';
}
lashus
Zapominasz sprawdzać czy żądanie przychodzi od formularza (dane metodą POST) tongue.gif Należy dodać po prostu na początku ifa jednego takiego:

Kod
if($_SERVER['REQUEST_METHOD'] === 'POST') {
tongue.gif

Ponadto nie wstawiasz słówka "mimetype" przed typem pliku tongue.gif Wystarczy dodać sam typ do tablicy do tablicy, więc twój kod powinien wyglądać tak:

Kod
if($_SERVER['REQUEST_METHOD'] === 'POST') {

// dodaje troche wiecej rozszerzen
$tablica[] = 'image/png';
$tablica[] = 'image/jpeg';
$tablica[] = 'image/gif';

if(array_search($_FILES['plik']['type'], $tablica) != false) {
      move_uploaded_file($plik_tmp, "$katalog/$plik_nazwa");
     echo "<font color=\"#FF0000\"><center>Plik: <strong>$plik_nazwa</strong> o rozmiarze
     <strong>$plik_rozmiar bajtów</strong> został przesłany na serwer!</font></center><br>
         <tr><td><font size=\"2\" color=\"#FFFFFF\">URL: </font></td><td><input type='text' name='thetext' onClick='highlight(this);' size='30' value='$domain/$katalog/$plik_nazwa'></td></tr><br>
         <tr><td><font size=\"2\" color=\"#FFFFFF\">HTML: </font></td><td><input type='text' name='thetext' onClick='highlight(this);' size='30' value='<a href=$domain/$katalog/$plik_nazwa>$plik_nazwa</a>'></td></tr><br>";
  
} else {
   echo '<font color=red>błędne rozszerzenie</font>';
}
}


Poza tym nie wiem czy pomyślałeś o tym, ale jeśli zostanie zauploadowany plik o tej samej nazwie i rozszerzeniu to poprzedni zostanie nadpisany. tongue.gif Powinieneś generować losową nazwę dla tego pliku, aby uniknąć takich sytuacji winksmiley.jpg Ponadto, aby uniknąć przeciążenia twojego serwera/planu hostingowego powinieneś wstawić zabezpieczenie przed wrzuceniem zbyt dużego pliku - powiedzmy max 2mB.
Sebaso
lashus a czy bym mogl prosic cie o zrobienie dobrego uploadu questionmark.gif Prosze cie o kontakt ze mna przez Komunikator Gadu - Gadu : 12583193
lashus
Zależy czego upload tongue.gif Mam jakiś stary skrypt uploadowania z czasów, gdy zaczynałem i mogę ci go podrzucić. Napisałem na gg.
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.