upload af dokumenter, hjælp til gennemsyn samt et spørgsmål
Jeg har et script som kan oploade alle fil-typer eller kun billeder.Men jeg vil kunne oploade .doc og .pdf filer samt billeder.
Men samtidig sikre, at der ikke kan køres scripts/hackes/exe eller what ever.
Sti til mappe.
// Skal der kun uploades billeder? true/false
$only_images = false;
// tilladte filtyper, bruges hvis $only_images = true
// arrayet er sammensat ud fra hvad getimagesize() returnerer
// ønskes f.eks. swf og wbmp filer tilføjet, skal 4 => "swf" og 15 => "wbmp" med i array'et $filtyper
// Array'et bruges også til navngivning af filen
$filtyper = array(1 => "gif", 2 => "jpg", 3 => "png");
// max kb pr. fil ved upload, hvis sat til 0 er der ingen begrænsning
// Husk serveropsætning også sætter begrænsninger. Normalt 2 Mb for upload
$max_kb = 0;
// Default antal viste uploadfelter
$default_fields = 5;
// END SETTINGS ///////////////////////////////////////////////////////////////////////////////////
//// HERFRA OG NED BEHØVER DU IKKE ÆNDRE ////
// Tjekker div. ///////////////////////////////////////
$ver = phpversion();
// Ok version af PHP ???
if($ver < 4.2) {
echo "Scriptet kan kun bruges fra PHP ver. 4.2 og op";
exit;
}
// Er upload tilladt ???
if(false == ini_get('file_uploads')) {
echo "Upload af filer er ikke tilladt i php.ini!";
exit;
}
// Er $file_name defineret korrekt ???
if($_SERVER["PHP_SELF"] != $file_name) {
echo "\$file_name er forkert defineret!";
exit;
}
// Findes dir til upload ???
if(!is_dir($dist)) {
echo "Dir til upload findes ikke!";
exit;
}
if(!is_writable($dist)) {
echo "Der er ikke skriverettigheder på uploaddir, ". $dist;
exit;
}
// End tjek div. //////////////////////////////////////
// Fjerner "bad" tegn i filnavn ved upload
function up_file_name($var) {
$badchars = "\"'*^´`+}{][£!§½%¤#=¨áàãââçéèêëìíîïñòóôõöùúûüýÿ?,\$/\\";
$var = strtolower($var);
for($i = 0; $i < strlen($badchars); $i++) {
$var = str_replace($badchars[$i], "", $var);
}
$replace = array("æ" => "ae", "ø" => "oe", "å" => "aa", " " => "_");
foreach($replace as $key => $value) {
$var = str_replace($key, $value, $var);
}
return $var;
}
// starter session hvis ikke startet. Bruges til at vise filer som er uploadet
if(!session_id()) {
session_start();
}
// UPLOAD AF FILER ////////////////////////////////////////
if(isset($_FILES["upfile"]) && is_array($_FILES["upfile"]))
{
foreach($_FILES["upfile"]["error"] as $key => $error)
{
if($error == UPLOAD_ERR_OK)
{
$tempnavn = $_FILES["upfile"]["tmp_name"][$key];
$filnavn = $_FILES["upfile"]["name"][$key];
$filnavn = up_file_name($filnavn);
if($max_kb > 0 && filesize($tempnavn) > ($max_kb*1024))
{
$_SESSION["errors"]["toobig"][] = $filnavn;
continue;
}
if($only_images == true)
{
if(false == ($str = getimagesize($tempnavn)))
{
$_SESSION["errors"]["no_img"][] = $filnavn;
continue;
}
$typen = $str[2];
if(!isset($filtyper[$typen]))
{
$_SESSION["errors"]["type"][] = $filnavn;
continue;
}
$filnavn = basename($filnavn, $filtyper[$typen]);
if(substr($filnavn, -1) != ".")
{
$filnavn = $filnavn .".";
}
$filnavn = $filnavn . $filtyper[$typen];
}
move_uploaded_file($tempnavn, $dist . $filnavn);
chmod($dist . $filnavn, 0644);
$_SESSION["files"][] = $filnavn;
}
else
{
if($error == 4)
{
continue;
}
$_SESSION["errors"]["upload"][] = $error;
$_SESSION["filnavn"][] = $_FILES["upfile"]["name"][$key];
}
}
header("Location:http://". $_SERVER["HTTP_HOST"] . $file_name);
exit;
}
// END UPLOAD AF FILER ////////////////////////////////////
?>
<html><head><title>Upload af filer</title>
<script type="text/javascript">
var feltantal = <?php echo $default_fields; ?>;
function div_text($antal) {
if(er_et_tal($antal) != false && $antal > 0) {
var ialt = 0;
var str = '';
while(ialt < $antal) {
str = str+'<br />\n<input type="file" name="upfile[]" size="32">';
ialt++;
}
document.getElementById('uploadfelter').innerHTML = str;
}
}
function er_et_tal() {
var reg = /^[\d]+$/;
var navn = document.forms['do_upload'].elements['antal'];
if(navn.value !='' && !navn.value.match(reg)){
alert("Kun tal kan indtastes i feltet!");
navn.value = '';
navn.focus();
return false;
}
}
</script>
</head>
<body>
<form name="do_upload" enctype="multipart/form-data" action="<?php echo $file_name; ?>" method="post">
Max. upload på en gang: <b><?php echo min(ini_get("post_max_size"), ini_get("upload_max_filesize")); ?>b.!</b><br />
Antal felter: <input type="text" name="antal" onkeyup="er_et_tal();" size="2">
<input type="button" value="Vis felter" onclick="div_text(this.form.antal.value);" onkeydown="div_text(this.form.antal.value);">
<div id="uploadfelter">
<script type="text/javascript">
div_text(feltantal);
</script>
</div>
<br />
<input type="submit" value="Upload">
</form>
<?php
if(isset($_SESSION["files"])) {
echo "Fil(er) som er blevet uploadet:<br />\r\n";
foreach($_SESSION["files"] as $fil)
{
echo $fil;
if(!empty($up_link))
{
echo" <a href=\"". $up_link . $fil ."\" target=\"_BLANK\">Vis fil</a>";
}
echo "<br />\r\n";
}
unset($_SESSION["files"]);
}
if(isset($_SESSION["errors"])) {
$error_msg = array("toobig" => "Valgte fil er større end tilladt, ( ". $max_kb ." Kb. )",
"no_img" => "Valgte fil er ikke et billede",
"type" => "Filtypen er ikke tilladt for upload",
"upload" => array(1 => "Filen er større end tilladt i php.ini, ( upload_max_filesize )",
2 => "Filen er større end tilladt hvad MAX_FILE_SIZE er defineret til i formularen",
3 => "Kun en del af filen blev uploadet",
6 => "Upload tmpdir findes ikke",
7 => "Fejl ved skrivning af fil til disk"));
$err = array_keys($_SESSION["errors"]);
foreach($err as $mess)
{
if(!isset($error_msg[$mess]))
{
continue;
}
echo"<p>\r\n";
$text = $error_msg[$mess];
if(!is_array($text))
{
echo htmlentities($text) ."<br />\r\n";
echo"<b>". implode("<br />\r\n", $_SESSION["errors"][$mess]) ."</b><br />\r\n";
}
else
{
$_SESSION["errors"][$mess] = array_unique($_SESSION["errors"][$mess]);
foreach($_SESSION["errors"][$mess] as $fejl) {
if(isset($text[$fejl]))
{
echo $text[$fejl];
echo"<br />\r\n<b>". implode("<br />\r\n", $_SESSION["filnavn"]) ."</b>";
}
}
echo"</p>\r\n";
}
}
unset($_SESSION["errors"], $_SESSION["filnavn"]);
}
?>
</body></html>
Og spørgsmålet:
udarbejdelse af et .php eller .html dokument som kan liste alle filerne?
150 point for fuld besvarelse.
