Avatar billede ken9 Nybegynder
12. august 2006 - 22:55 Der er 24 kommentarer og
1 løsning

Fil upload

Hej eksperter!

Jeg har dette script til at uploade filer, men jeg vil gerne have at det bliver lavet lidt om, så man kan lave filnavnet om + ændre hvor filen skal placeres i disse variabler:

$nytfilnavn = 'blabla';
$mappe = 'der hvor filen skal ligge';

Mit problem er at jeg ikke ved hvordan man laver filnavnet om, og samtidig får filendenelsen med, f.eks. .doc eller .pdf

Jeg ville også blive glad hvis nogen kunne forklare mig hvordan jeg gør så kun .doc og .pdf filer kan uploades :-)

<?
if ( !empty( $_FILES['fil'] ) && is_uploaded_file( $_FILES['fil']['tmp_name'] ) )
{
if ( !file_exists( $_FILES['fil']['name'] ) )
{
if ( $_FILES['fil']['size'] <= 5000000 )
{
move_uploaded_file( $_FILES['fil']['tmp_name'], $nyt_navn );
echo "Blev uploadet <a href=\"".$_FILES["fil"]["name"]."\" target=\"_blank\">her til</a>. <a href=\"?\">Upload igen her</a>";
}
else
{
echo "Filen må maksimalt være 5 MB!";
}
}
else
{
echo $_FILES['fil']['name'] . " eksisterer allerede.";
}
}
else
{ }
?>

Beklager, jeg havde gerne smidt flere point i, hvis jeg havde flere :/
Avatar billede Slettet bruger
12. august 2006 - 23:08 #1
Hvorfor ikke få filnavnet generet automatisk? f.eks. ved noget dato og klokkeslæt.
Avatar billede ken9 Nybegynder
12. august 2006 - 23:10 #2
Det ville også være OK med timestamp som filnavn! :-)

Jeg ved bare ikke hvordan man laver det :)
Avatar billede Slettet bruger
12. august 2006 - 23:14 #3
jeg er igang med at lave det hvis det er :D
Avatar billede Slettet bruger
12. august 2006 - 23:19 #4
Del 1:

<?PHP
    $dir = ""; // directory with slash
    $filename = "";
   
    if (isset($_POST['goUpload'])) {
        if(isset($_FILES)) {
            $filename = (empty($filename)) ? mktime() . md5($_FILES['name']) : $filename;
            if(move_uploaded_file($_FILES['tmp_name'], $dir.$filename)) {
                echo "Filen er nu blevet uploadet som (<b>".$filename."</b>)<br />";
            } else {
                echo "Filen (<b>".$_FILES['name']."</b>) kunne IKKE blive uploadet!<br />";
            }
        } else {
            echo "Der er ikke valgt nogen fil.<br />";
        }
    }
?>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="fil" /><br />
<input type="submit" name="goUpload" /><br />
</form>
Avatar billede Slettet bruger
12. august 2006 - 23:19 #5
Laver lige så der er $maxsize på.
Avatar billede Slettet bruger
12. august 2006 - 23:19 #6
hvis $filename er tom laver den automatisk nyt navn.
Avatar billede Slettet bruger
12. august 2006 - 23:21 #7
der var lige en fejl


<?PHP
    $dir = ""; // directory with slash
    $filename = "";
   
    if (isset($_POST['goUpload'])) {
        if(isset($_FILES)) {
            $filename = (empty($filename)) ? mktime() . md5($_FILES['fil']['name']) : $filename;
            if(move_uploaded_file($_FILES['tmp_name'], $dir.$filename)) {
                echo "Filen er nu blevet uploadet som (<b>".$filename."</b>)<br />";
            } else {
                echo "Filen (<b>".$_FILES['fil']['name']."</b>) kunne IKKE blive uploadet!<br />";
            }
        } else {
            echo "Der er ikke valgt nogen fil.<br />";
        }
    }
?>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="fil" /><br />
<input type="submit" name="goUpload" /><br />
</form>
Avatar billede Slettet bruger
12. august 2006 - 23:24 #8
Du skal lige vente til jeg er helt færdig for der er nogen fejl, men har fundet den... :D
Avatar billede ken9 Nybegynder
12. august 2006 - 23:27 #9
Okay *G* - tak :-)

jeg venter...
Avatar billede Slettet bruger
12. august 2006 - 23:39 #10
<?PHP
    $dir = "filer/"; // directory with slash
    $filename = ""; // leave empty and it will give the file a unique name
    $maxsize = 2 * 1024; // 2 * 1024 is 2 mb
    $showArray = true; // true or false
   
    if (isset($_POST['goUpload'])) {
        if(isset($_FILES)) {
            if($maxsize <= $_FILES['fil']['size']) {
                $name = $_FILES['fil']['name'];
                $filename = (empty($filename)) ? mktime() ."_". md5($name.uniqid()).".".substr($name, strlen($name)-3) : $filename;
                if(move_uploaded_file($_FILES['fil']['tmp_name'], $dir.$filename)) {
                    echo "Filen er nu blevet uploadet som (<b>".$filename."</b>)<br />";
                } else {
                    echo "Filen (<b>".$name."</b>) kunne IKKE blive uploadet!<br />";
                }
            } else {
                echo "Filen fylder for meget, den må maks fylde ". $maxsize."<br />";
            }
        } else {
            echo "Der er ikke valgt nogen fil.<br />";
        }
       
        if($showArray) {
            print "<pre>";
            print_r($_FILES);
            print "</pre>";
        }
    }
?>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="fil" /><br />
<input type="submit" name="goUpload" value="Upload fil" /><br />
</form>
Avatar billede Slettet bruger
12. august 2006 - 23:40 #11
$showArray sætter du så bare til false, når du har testet det, så kan du nemlig lige se hvad der sker med filen, og hvilke infomationer man kan hive ud af $_FILES arrayet
Avatar billede Slettet bruger
12. august 2006 - 23:44 #12
Din kode her, den der hedder move_uploaded_file(), du tjekker ikke på om den bliver uploadet, den skriver bare hver gang at filen er nu blevet uploadet :D

du kan sætte en if(move_uploaded_file($parameters)) {} omkring.


if ( $_FILES['fil']['size'] <= 5000000 )
{
move_uploaded_file( $_FILES['fil']['tmp_name'], $nyt_navn );
echo "Blev uploadet <a href=\"".$_FILES["fil"]["name"]."\" target=\"_blank\">her til</a>. <a href=\"?\">Upload igen her</a>";
}
Avatar billede ken9 Nybegynder
12. august 2006 - 23:45 #13
Okay cool.. tak.. :-) jeg tester det om lidt

kunne der evt. komme noget halløj ind så kun .doc og .pdf filer er gyldige? :-)
Avatar billede Slettet bruger
12. august 2006 - 23:45 #14
jep sec...
Avatar billede Slettet bruger
12. august 2006 - 23:51 #15
<?PHP
    $dir = "filer/"; // directory with slash
    $filename = ""; // leave empty and it will give the file a unique name
    $maxsize = 2 * 1024; // 2 * 1024 is 2 mb
    $ext = array("doc", "pdf"); // leaves empty if all files extension is okay
    $showArray = true; // true or false
   
    if (isset($_POST['goUpload'])) {
        if(isset($_FILES)) {
            if($maxsize <= $_FILES['fil']['size']) {
                $name = $_FILES['fil']['name'];
                $file_ext = substr($name, strlen($name)-3);
                if(in_array($file_ext, $ext)) {
                    $filename = (empty($filename)) ? mktime() ."_". md5($name.uniqid()).".".$file_ext : $filename;
                    if(move_uploaded_file($_FILES['fil']['tmp_name'], $dir.$filename)) {
                        echo "Filen er nu blevet uploadet som (<b>".$filename."</b>)<br />";
                    } else {
                        echo "Filen (<b>".$name."</b>) kunne IKKE blive uploadet!<br />";
                    }
                } else {
                    echo "Forkert fil type!<br />";
                }
            } else {
                echo "Filen fylder for meget, den må maks fylde ". $maxsize."<br />";
            }
        } else {
            echo "Der er ikke valgt nogen fil.<br />";
        }
       
        if($showArray) {
            print "<pre>";
            print_r($_FILES);
            print "</pre>";
        }
    }
?>
<form action="" method="post" enctype="multipart/form-data">
<?PHP if(count($ext) <> 0) echo "Godkendte filtyper: ".implode($ext,", ")."<br />"; ?>
<input type="file" name="fil" /><br />
<input type="submit" name="goUpload" value="Upload fil" /><br />
</form>
Avatar billede Slettet bruger
12. august 2006 - 23:51 #16
Sådan der...
Avatar billede Slettet bruger
12. august 2006 - 23:57 #17
Men der er vist noget om man pr. default kun kan upload filer med maks 2mb, men det kan ændres med denne kode:


<?PHP
    $dir = "filer/"; // directory with slash
    $filename = ""; // leave empty and it will give the file a unique name
    $maxsize = 2 * 1024; // 2 * 1024 is 2 mb
    ini_set(upload_max_filesize, $maxsize);
    $ext = array("doc", "pdf"); // leaves empty if all files extension is okay
    $showArray = true; // true or false
   
    if (isset($_POST['goUpload'])) {
        if(isset($_FILES)) {
            if($maxsize <= $_FILES['fil']['size']) {
                $name = $_FILES['fil']['name'];
                $file_ext = substr($name, strlen($name)-3);
                if(in_array($file_ext, $ext)) {
                    $filename = (empty($filename)) ? mktime() ."_". md5($name.uniqid()).".".$file_ext : $filename;
                    if(move_uploaded_file($_FILES['fil']['tmp_name'], $dir.$filename)) {
                        echo "Filen er nu blevet uploadet som (<b>".$filename."</b>)<br />";
                    } else {
                        echo "Filen (<b>".$name."</b>) kunne IKKE blive uploadet!<br />";
                    }
                } else {
                    echo "Forkert fil type!<br />";
                }
            } else {
                echo "Filen fylder for meget, den må maks fylde ". $maxsize."<br />";
            }
        } else {
            echo "Der er ikke valgt nogen fil.<br />";
        }
       
        if($showArray) {
            print "<pre>";
            print_r($_FILES);
            print "</pre>";
        }
        ini_restore(upload_max_filesize);
    }
?>
<form action="" method="post" enctype="multipart/form-data">
<?PHP if(count($ext) <> 0) echo "Godkendte filtyper: ".implode($ext,", ")."<br />"; ?>
<input type="file" name="fil" /><br />
<input type="submit" name="goUpload" value="Upload fil" /><br />
</form>
Avatar billede Slettet bruger
13. august 2006 - 00:40 #18
Testet det?
Avatar billede ken9 Nybegynder
13. august 2006 - 01:01 #19
Ja.. det virker perfekt! :-)

udover jeg lige får den her fejl:

Warning: uniqid() expects at least 1 parameter, 0 given in /mounted-storage/home21b/sub001/sc20616-DXDH/studiemedia.dk/community/upload/upload.php on line 65
Filen er nu blevet uploadet som (1155423620_51ac2bf7470c41f1f665c56ede07dc11.doc)
Avatar billede Slettet bruger
13. august 2006 - 10:12 #20
Så skulle fejlen være rettet:

<?PHP
    $dir = "filer/"; // directory with slash
    $filename = ""; // leave empty and it will give the file a unique name
    $maxsize = 2 * 1024; // 2 * 1024 is 2 mb
    ini_set(upload_max_filesize, $maxsize);
    $ext = array("doc", "pdf"); // leaves empty if all files extension is okay
    $showArray = true; // true or false
   
    if (isset($_POST['goUpload'])) {
        if(isset($_FILES)) {
            if($maxsize <= $_FILES['fil']['size']) {
                $name = $_FILES['fil']['name'];
                $file_ext = substr($name, strlen($name)-3);
                if(in_array($file_ext, $ext)) {
                    $filename = (empty($filename)) ? mktime() ."_". md5($name.uniqid(rand(0, true))).".".$file_ext : $filename;
                    if(move_uploaded_file($_FILES['fil']['tmp_name'], $dir.$filename)) {
                        echo "Filen er nu blevet uploadet som (<b>".$filename."</b>)<br />";
                    } else {
                        echo "Filen (<b>".$name."</b>) kunne IKKE blive uploadet!<br />";
                    }
                } else {
                    echo "Forkert fil type!<br />";
                }
            } else {
                echo "Filen fylder for meget, den må maks fylde ". $maxsize."<br />";
            }
        } else {
            echo "Der er ikke valgt nogen fil.<br />";
        }
       
        if($showArray) {
            print "<pre>";
            print_r($_FILES);
            print "</pre>";
        }
        ini_restore(upload_max_filesize);
    }
?>
<form action="" method="post" enctype="multipart/form-data">
<?PHP if(count($ext) <> 0) echo "Godkendte filtyper: ".implode($ext,", ")."<br />"; ?>
<input type="file" name="fil" /><br />
<input type="submit" name="goUpload" value="Upload fil" /><br />
</form>
Avatar billede Slettet bruger
13. august 2006 - 10:17 #21
Rimelig vigtigt når du skal lave et upload script, og en fejl man kan kigge sig blind på mange gange... det er selve formen, da der lige skal tilføjes  enctype="multipart/form-data", ellers så kan dit upload script være noget så pænt, men det vil aldrig komme til at virke!

Nr. 2, er self du skal ha' et input felt med type 'file', og det navn du giver den skal du bruge til at rykke filen med. <input type="file" name="fil" />: namet er fil, så derfor skal vi $_FILES['fil']['et_eller_andet'], havde namet nu være uploadfile, så skulle vi skrive $_FILES['uploadfile']['et_eller_andet'].

Håber du er med?
Avatar billede Slettet bruger
13. august 2006 - 10:19 #22
Du skal lige rette linje 10:

dette if(isset($_FILES)) {

skal rettes til ->

denne if(!empty($_FILES['fil']['name'])) {
Avatar billede ken9 Nybegynder
13. august 2006 - 13:06 #23
Jep jeg er med, dog bruger jeg min egen form, hvor der er noget javascript og noget tilknyttet, men jeg tror ikke jeg har en enctype, så det prøver jeg lige og melder tilbage ;)
Avatar billede ken9 Nybegynder
13. august 2006 - 18:02 #24
Fedt! :-)

Det virker upåklageligt... cool

Jeg siger mangetak for hjælpen, smider du et svar? :-)
Avatar billede Slettet bruger
13. august 2006 - 18:53 #25
Det kan du tro :D
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