Avatar billede jokerper Nybegynder
05. juni 2007 - 19:10 Der er 4 kommentarer og
1 løsning

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&aring; 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.
Avatar billede dkfire Nybegynder
05. juni 2007 - 22:56 #1
Hvius jeg har forstået det rigtigt, så vil du gerne have et script som lister alle dine filer som ligger i en bestemt mappe ???
Avatar billede jokerper Nybegynder
05. juni 2007 - 23:14 #2
Det har jeg fundet ud af, men hele denne kode er problemmet. Kan du sige mig hvor jeg skal rette for at kunne oploade .doc og .pdf - filer samt billeder. Og ikke ved at ændre false til true "øverst" // Skal der kun uploades billeder? true/false
    $only_images = false;


Men jeg vil ikke sætte den til true for så kan alle filer oploades.
Avatar billede jokerper Nybegynder
05. juni 2007 - 23:18 #3
Det er selvfølgelig omvendt til false. For så kan alle filer oploades.

Jeg tror selv det har noget med dette at gøre + noget mere:
// ø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");


--------------------
Jeg har prøvet at tilføje filtyper, men så kommer der en fejl, er ikke en billede fil.

og så bliver den ikke oploaded.
Avatar billede jokerper Nybegynder
06. juni 2007 - 03:26 #4
Det lykkedes mig at finde noget brugbart.

= array("image/bmp", "application/msword");

Men der er kommet et nyt spm.
Avatar billede jokerper Nybegynder
06. juni 2007 - 03:27 #5
Lukker her.
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