Autor Zpráva
ondraK
Profil *
Dobrý den,
chtěl bych se zeptat,jde nějak v php ošetřit, aby se při načtení souboru a následném uploudování nahrávaly soubory pouze s příponou .txt? a pokud bych vybral jiný třeba .pdf aby to napsalo chybovou hlásku. Předem moc díky.

<?php

if($_POST['upload'])
{
  $promenna=$_FILES['file']['tmp_name']; 
  if($promenna==*.txt)
  {
    echo "ano muzete nahravat";
  }
  else
  {
    echo "Ne nemuzete nahravat";
  }
  
}

?>
<form method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submint" name="upload">
<form>
MCKAY
Profil
ondraK:
Dole máš v kódu mimo jiné místo input type="submit" submint

Co se týče toho výběru určitého typu souboru, bylo by možná lepší to udělat přímo výběrem typu dat ve formuláři a/nebo si ve zpracujícím skriptu pohrát s poli, popřípadě regulárními výrazy, které ti to ošetří.
panther
Profil
ondraK:
kontroluj znaky za poslední tečkou v názvu souboru. Zároveň si vytvoř pole s pří příponami (kdyby jich bylo více). Pak jen tyto dvě věci porovnáš.
Aleš Janda
Profil
panther:
kontroluj znaky za poslední tečkou v názvu souboru.

Tak na tohle pozor, šikovný útočník by tam pomocí nulového znaku mohl propašovat příponu jakou chce, což je celkem zrádné.
Viz hádanka na http://www.abclinuxu.cz/blog/kybl/2009/9/programatorska-hadanka-3-bezpecnostni-zrada
a popis problému na http://www.abclinuxu.cz/blog/kybl/2009/9/reseni-3.-programatorske-hadanky-aneb-jak-napadnout-web

Z mnoha důvodů jsou bezpečnější ty regulární výrazy přes celý řetězec, např.
if (EReg('^[a-zA-Z0-9]+\.txt$',$promenna)) echo 'Můžeš';
else echo 'Bohužel kužel';
AM_
Profil
Aleš Janda:
ereg jsou zastaralé, raději
preg_match('/^[a-z0-9]+\.txt$/i',$promenna)
ondraK
Profil *
Zkusil jsem tedy použít neprve ten preg_match a následně ereg jak jste psali, ale bohužel ani v jednom případě to vypsalo že to není txt. Nevíte kde by mohla být chyba?

<?php
if(isset($_POST['submit']))
{
    $promenna=$_FILES['file']['tmp_name'];
    
    if (EReg('^[a-zA-Z0-9]+\.txt$',$promenna))
    {
    
      echo "ano,múžete je to txt";
    
    }
    else
    {
      echo "ne, tohle neni txt";
    }

  }
?>
<form method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" name="submit" value="Upload">
</form>
ondraK
Profil *
Oprava: S txt souborem to píše že to není TXT soubor:-(
ondraK
Profil *
Když jsem si echem nechal vypsat co je v $promenna tak mi to vypsalo:C:\Windows\Temp\php9388.tmp, v tom asi bude ten háček, nevěděli by jste prosím jak tohle ošetřit?
Akacko
Profil
ondraK:
Co takhle
$promenna=$_FILES['file']['name'];
ondraK
Profil *
Moc díky, tuhl kombinaci jsem zkoušel, ale trošku mi tvralo, než mi to došlo. ještě jednou díky:

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: