Avatar billede proviben Novice
26. juli 2004 - 20:15 Der er 5 kommentarer og
1 løsning

upload-script, mime-typerne: gif jpg png

Hvorledes kan følgende upload-script ændres, således at det udelukkende vil acceptere mime-typerne: gif jpg png ?

Fik løst noget tilsvarende, dog i et formmail-script:
http://www.eksperten.dk/spm/519529

/Henrik

<?php

/**
* Simpelt script der tager imod et filupload og lister
* filer i upload-biblioteket.
*
* Scriptet er et eksempel til en artikel paa WebCafe.dk:
*
* http://www.webcafe.dk/artikler/php/upload/
*/


/**
* Hvor skal filerne uploades til?
* Husk, at webserveren skal kunne skrive til dette bibliotek
*/
$konfiguration["upload_bibliotek"] = "./upload";

/* Hvor mange kilobytes maa filerne fylde per styk? */
$konfiguration["max_stoerrelse"] = "30";


/**
* Checker PHP-version
*/
list($major, $minor, $rev) = explode(".", phpversion());
if($major < 4) {
die("Jeg kan kun arbejde med PHP 4.0.0 eller derover");
}


/**
* Udligner forskellene mellem 4.1.x og 4.0.x
* Bemaerk, at disse ikke er "superglobals"
*/
if($minor < 1) {
$_FILES = $HTTP_POST_FILES;
$_POST = $HTTP_POST_VARS;
$_SERVER = $HTTP_SERVER_VARS;
}


if($_FILES["upfil"]["size"] > 0) {

/**
* Hvis der er en fil, saa uploader vi den.
*
* Foerst slaar vi lige fast, hvor filen skal flyttes fra og til.
*/

$fra = $_FILES["upfil"]["tmp_name"];
$til = $konfiguration["upload_bibliotek"] . "/" . $_FILES["upfil"]["name"];

/**
* Checker lige om filen er for stor til at vi vil acceptere den.
* Vi bruger ceil() i stedet for round(), saa vi ikke faar den skoere
* situation, at fejlmeldingen siger, at filen er for stor, men angiver
* samme stoerrelse for filen og den oevre graense.
*/
$fil_stoerrelse = filesize($fra)/1024;
if($fil_stoerrelse > $konfiguration["max_stoerrelse"]) {
die("Desv&aelig;rre - filen er for stor. Jeg accepterer kun " .
$konfiguration["max_stoerrelse"] . "kb, og din fil fylder " .
ceil($fil_stoerrelse) . "kb");
}
if(function_exists("move_uploaded_file")) {
move_uploaded_file($fra, $til);
} else {
copy($fra, $til);
}

header("Location: " . $_SERVER["PHP_SELF"]);
exit;

} else {

/**
* Intet tegn paa upload, saa vi viser bare listen over filer
* og HTML-formularen til nye uploads.
*/
$indhold = listFiler($konfiguration["upload_bibliotek"]);
$indhold .= bygFormular($_SERVER["PHP_SELF"]);
$output = bygSide("hej", $indhold);

}


/**
* Skriver ud til browseren
*/
echo $output;
exit;



/**************************************************\
** Hjaelpefunktioner **
\**************************************************/

function bygSide($titel, $indhold) {

/**
* Pakker indholdet ind i lidt formalia
*/
return '<html>
<head><title>' . $titel . '</title></head>
<style type="text/css">

.overskrift {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 16px;
font-weight: bold;
font-style: italic;

}
.tekst {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 12px;

}

</style>
<body bgcolor="#ffffff">
<div align="right" class="tekst"><a href="./">Tilbage til artiklen</a></div>
' . $indhold . '</body>
</html>
';

}

function bygFormular($action) {

$formular = '<form action="' . $action . '" method="post" enctype="multipart/form-data">
<table border="1" cellpadding="5" cellspacing="0">
<tr>
<td align="right" bgcolor="#999999" class="tekst"><b>Fil til upload:</p></b></td>
<td bgcolor="#cccccc"><input type="file" name="upfil" />&nbsp;&nbsp;<input type="submit" value="upload" /></td>
</tr>

</table>
</form>
';

return "<h2><p class=\"overskrift\">Upload fil:</h2></p>" . $formular;

}

function listFiler($bibliotek) {

if($bib = @opendir($bibliotek)) {
/**
* Denne syntaks er forklaret i PHP-manualen:
* http://www.php.net/manual/en/function.readdir.php
*/
while (false !== ($fil = readdir($bib))) {
if($fil != "." && $fil != ".." && !ereg("^\..+", $fil)) {
$fil_liste[] = "<a href=\"$bibliotek/$fil\"><p class=\"tekst\">$fil</p></a>";
}
}
closedir($bib);

if(is_array($fil_liste)) {
$liste = "<li>" . join("</li><li>", $fil_liste) . "</li>";
} else {
$liste = "<li>Ingen filer p&aring; lager</li>";
}
return "<h2><p class=\"overskrift\">Filer p&aring; lager:</p></h2><ul>"
. $liste ."


</ul>";
} else {
die("Kunne ikke &aring;bne biblioteket: " . $bibliotek);
}

}

?>
Avatar billede taskmgr Nybegynder
26. juli 2004 - 20:47 #1
Prøv med dette her:

<?php

/**
* Simpelt script der tager imod et filupload og lister
* filer i upload-biblioteket.
*
* Scriptet er et eksempel til en artikel paa WebCafe.dk:
*
* http://www.webcafe.dk/artikler/php/upload/
*/


/**
* Hvor skal filerne uploades til?
* Husk, at webserveren skal kunne skrive til dette bibliotek
*/
$konfiguration["upload_bibliotek"] = "./upload";

/* Hvor mange kilobytes maa filerne fylde per styk? */
$konfiguration["max_stoerrelse"] = "30";
$konfiguration['mime_typer'] = array("jpg","png","gif");

/**
* Checker PHP-version
*/
list($major, $minor, $rev) = explode(".", phpversion());
if($major < 4) {
die("Jeg kan kun arbejde med PHP 4.0.0 eller derover");
}


/**
* Udligner forskellene mellem 4.1.x og 4.0.x
* Bemaerk, at disse ikke er "superglobals"
*/
if($minor < 1) {
$_FILES = $HTTP_POST_FILES;
$_POST = $HTTP_POST_VARS;
$_SERVER = $HTTP_SERVER_VARS;
}


if($_FILES["upfil"]["size"] > 0) {

/**
* Hvis der er en fil, saa uploader vi den.
*
* Foerst slaar vi lige fast, hvor filen skal flyttes fra og til.
*/

$fra = $_FILES["upfil"]["tmp_name"];
$til = $konfiguration["upload_bibliotek"] . "/" . $_FILES["upfil"]["name"];

/**
* Checker lige om filen er for stor til at vi vil acceptere den.
* Vi bruger ceil() i stedet for round(), saa vi ikke faar den skoere
* situation, at fejlmeldingen siger, at filen er for stor, men angiver
* samme stoerrelse for filen og den oevre graense.
*/
$fil_stoerrelse = filesize($fra)/1024;
$path_parts = pathinfo($til);
if($fil_stoerrelse > $konfiguration["max_stoerrelse"]) {
die("Desv&aelig;rre - filen er for stor. Jeg accepterer kun " .
$konfiguration["max_stoerrelse"] . "kb, og din fil fylder " .
ceil($fil_stoerrelse) . "kb");
}elseif(!in_array($path_parts["extension"], $konfiguration['mime_typer'])){
    die("Filtypen er ikke tilladt.");
}
if(function_exists("move_uploaded_file")) {
move_uploaded_file($fra, $til);
} else {
copy($fra, $til);
}

header("Location: " . $_SERVER["PHP_SELF"]);
exit;

} else {

/**
* Intet tegn paa upload, saa vi viser bare listen over filer
* og HTML-formularen til nye uploads.
*/
$indhold = listFiler($konfiguration["upload_bibliotek"]);
$indhold .= bygFormular($_SERVER["PHP_SELF"]);
$output = bygSide("hej", $indhold);

}


/**
* Skriver ud til browseren
*/
echo $output;
exit;



/**************************************************\
** Hjaelpefunktioner **
\**************************************************/

function bygSide($titel, $indhold) {

/**
* Pakker indholdet ind i lidt formalia
*/
return '<html>
<head><title>' . $titel . '</title></head>
<style type="text/css">

.overskrift {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 16px;
font-weight: bold;
font-style: italic;

}
.tekst {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 12px;

}

</style>
<body bgcolor="#ffffff">
<div align="right" class="tekst"><a href="./">Tilbage til artiklen</a></div>
' . $indhold . '</body>
</html>
';

}

function bygFormular($action) {

$formular = '<form action="' . $action . '" method="post" enctype="multipart/form-data">
<table border="1" cellpadding="5" cellspacing="0">
<tr>
<td align="right" bgcolor="#999999" class="tekst"><b>Fil til upload:</p></b></td>
<td bgcolor="#cccccc"><input type="file" name="upfil" />&nbsp;&nbsp;<input type="submit" value="upload" /></td>
</tr>

</table>
</form>
';

return "<h2><p class=\"overskrift\">Upload fil:</h2></p>" . $formular;

}

function listFiler($bibliotek) {

if($bib = @opendir($bibliotek)) {
/**
* Denne syntaks er forklaret i PHP-manualen:
* http://www.php.net/manual/en/function.readdir.php
*/
while (false !== ($fil = readdir($bib))) {
if($fil != "." && $fil != ".." && !ereg("^\..+", $fil)) {
$fil_liste[] = "<a href=\"$bibliotek/$fil\"><p class=\"tekst\">$fil</p></a>";
}
}
closedir($bib);

if(is_array($fil_liste)) {
$liste = "<li>" . join("</li><li>", $fil_liste) . "</li>";
} else {
$liste = "<li>Ingen filer p&aring; lager</li>";
}
return "<h2><p class=\"overskrift\">Filer p&aring; lager:</p></h2><ul>"
. $liste ."


</ul>";
} else {
die("Kunne ikke &aring;bne biblioteket: " . $bibliotek);
}

}

?>
Avatar billede taskmgr Nybegynder
26. juli 2004 - 20:56 #2
Bemærk forresten at den ikke tjekker mime-type, men "blot" fil-endelsen. Det foretrækker jeg da ikke alle browsere sender mime-typen med.
Avatar billede proviben Novice
26. juli 2004 - 21:04 #3
Det virker desværre ikke.
Avatar billede taskmgr Nybegynder
26. juli 2004 - 21:07 #4
Hvad er problemet? Her virker det fint, så du bliver nød til at fortælle mig hvad der sker? :)
Avatar billede proviben Novice
26. juli 2004 - 21:49 #5
Scriptet virker perfekt, manglede blot at chkmod mit upload dir. Mange tak for hjælpen taskmgr, de 100 point er nu på vej.
Avatar billede taskmgr Nybegynder
26. juli 2004 - 22:21 #6
Ok, det var godt :) Jeg siger velbekomme og tak for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester