script laten controleren op extensie

Status
Niet open voor verdere reacties.

Tom25

Gebruiker
Lid geworden
23 mrt 2008
Berichten
119
Hoi,

Ik heb een script gevonden om bestanden te uploaden. Maar ik wil dat gebruikers alleen mp3 bestanden mogen uploaden. Alleen heb ik niet zoveel verstand van php. En weet ik niet hoe ik dit helemaal moet aanpakken.

Het script komt hiervandaan:
http://www.energyscripts.com/Products/product2.html

PHP:
<?
include("config.php");

function path_options()
{
 global $upload_dirs;
  $option = "";
  foreach ($upload_dirs as $path => $pinfo)
  {
    $option .= '<option value="'.$path.'">'.$pinfo["name"].'</option>';
  }
 return $option;
}

function check_vals()
{
 global $upload_dirs, $err;
	if (!ini_get("file_uploads")) { $err .= "HTTP file uploading is blocked in php configuration file (php.ini). Please, contact to server administrator."; return 0; }
	$pos = strpos(ini_get("disable_functions"), "move_uploaded_file");
	if ($pos !== false) { $err .= "PHP function move_uploaded_file is blocked in php configuration file (php.ini). Please, contact to server administrator."; return 0; }
  if (!isset($_POST["path"]) || (strlen($_POST["path"]) == 0)) { $err .= "Please fill out path"; return 0; }
  if (!isset($upload_dirs[$_POST["path"]])) { $err .= "Incorrect path"; return 0; }
  if (!isset($_POST["pwd"]) || (strlen($_POST["pwd"]) == 0)) { $err .= "Please fill out password"; return 0; }
  elseif ($_POST["pwd"] != $upload_dirs[$_POST["path"]]["password"]) { $err .= "The upload password is incorrect"; return 0; }
  if (!isset($_FILES["userfile"])) { $err .= "Empty file"; return 0; }
  elseif (!is_uploaded_file($_FILES['userfile']['tmp_name'])) { $err .= "Empty file"; return 0; }
 return 1;
}

$err = ""; $status = 0;
if (isset($_POST["upload"])) {
  if (check_vals()) {
    if (filesize($_FILES["userfile"]["tmp_name"]) > $max_file_size) $err .= "Ons limiet is: $max_file_size bytes";
    else {
      if (move_uploaded_file($_FILES["userfile"]["tmp_name"], $upload_dirs[$_POST["path"]]["dir"].$_FILES["userfile"]["name"])) {
				$status = 1;
			}
      else $err .= "Er zijn wat problemen!";
    }
  }
}

if (!$status) {
  if (strlen($err) > 0) echo "<h4>$err</h4>";
}
else {
  echo "<h4>&quot;".$_FILES["userfile"]["name"]."&quot; is goed aangekomen ;)</h4>";
}
?>
<p class="cnt_welcome">&nbsp;</p>
<p class="cnt">&nbsp;</p>
<p class="cnt">&nbsp;</p>
<br />
<form enctype="multipart/form-data" action="index.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="<?=$max_file_size?>" />
<table class="main_table" align="center">
  <tr>
    <td colspan="2" class="head_line"><div align="center">
      <p class="stijl1 stijl2">Upload hier uw muziek..</p>
      </div></td>
  </tr>
  <tr>
    <td width="39"><div align="right">Genre:</div></td>
    <td width="341"><select name="path"><?=path_options()?></select></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><input name="pwd" type="hidden" style="width: 217px;" value="servertom" /></td>
  </tr>
  <tr>
    <td><div align="right">Lied:</div></td>
    <td><input type="file" name="userfile" style="width: 222px;" /></td>
  </tr>
  <tr>
    <td colspan="2" align="right"><div align="center">
      <p>
        <input type="submit" name="upload" value="Upload" class="button" />
        </p>
      </div></td>
  </tr>
</table>
<p align="center"><span class="cnt">Maximale grootte:
    <?=$max_file_size/1024?>
Kb.

^ Is niet het volledige upload programma. ^

Dit script controleert dus niet op extensie.
Het script hieronder doet dit wel. Nu wou ik dus dat gedeelte van het onderstaande script dat op extensie controleert in het bovenstaande script gebruiken.

PHP:
<?
//verander de onderstaande gegevens

$locatie="images/"; //of een andere map, vergeet niet de w-rechten
$toegestaan = "jpg, gif, png"; // extensies die toegestaan zijn
$max_size = 15000; //maximale grootte van het bestand in bytes

//stop met veranderen

set_time_limit(0);

if(isset($_POST['upload']))
{
    if(is_uploaded_file($_FILES['bestand']['tmp_name']))
    {
        $extensie_bestand = pathinfo($_FILES['bestand']['name']);
        $extensie_bestand = $extensie_bestand[extension];

        $extensies_toegestaan = explode(", ", $toegestaan);

        for($i = 0; $i < count($extensies_toegestaan); $i++)
        {
            if($extensies_toegestaan[$i] == "$extensie_bestand")
            {
                $ok = 1;
            }
        }

        if($ok == 1)
        {
            if($_FILES['bestand']['size']>$max_size)
            {
                echo "Het bestand is te groot, de maximale grootte is: <b>$max_size</b>";
                exit;
            }

            if(!move_uploaded_file($_FILES['bestand']['tmp_name'],
            $locatie.$_FILES['bestand']['name']))
            {
                echo "het bestand kan niet worden verplaatst";
                exit;
            }

            echo "Het bestand ".$_FILES['bestand']['name']." is geupload<br>
            <a href='".$locatie."".$_FILES['bestand']['name']."' target='_blank'>Klik hier om het te bekijken</a>";
        }
        else
        {
            echo "Verkeerde extentie, de toegestane extensies zijn: <b>$toegestaan</b>";
        }
    }
    else
    {
        echo "Het uploaden is mislukt";
    }

}

?>
<br><br>
<form method="post" action="<?=$_SERVER['PHP_SELF']?>" enctype="multipart/form-data">
<input type="file" name="bestand"><br>
<input type="submit" name="upload" value="uploaden">
</form>

bron: http://www.gratizwebtoolz.nl/script.php?id=29

Het gaat dus om dit stukje:
PHP:
 if(is_uploaded_file($_FILES['bestand']['tmp_name']))
    {
        $extensie_bestand = pathinfo($_FILES['bestand']['name']);
        $extensie_bestand = $extensie_bestand[extension];

        $extensies_toegestaan = explode(", ", $toegestaan);

        for($i = 0; $i < count($extensies_toegestaan); $i++)
        {
            if($extensies_toegestaan[$i] == "$extensie_bestand")
            {
                $ok = 1;
            }

Is dit mogelijk??

Sorry voor de lange post :rolleyes:




Gr,
Tom :D
 
Ik heb geen zin die code door te kijken, maar op extensie controleren doe je zo:

PHP:
// Eventueel in de volgende array nog meer items toevoegen.
$aExtensions = array('mp3');
$sExtension = strtolower(substr($_FILES['file']['name'], strripos($_FILES['file']['name'], '.')+1));

if(in_array($sExtension, $aExtensions)){

  echo 'Goed';

}else{

  echo 'Fout';

}

Bedenk je wel dat dit niet de veiligste manier is. Beter is te controleren op MIME-types e.d., maar voor nu voldoet dit wel denk ik. Wel even zelf in je script zetten.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan