Avatar billede dasch87 Nybegynder
23. januar 2008 - 14:07 Der er 18 kommentarer og
1 løsning

PHP upload igen igen

Hej Eksperter
Jeg ved godt der findes utalligt mange tråde med dette emne og jeg har også søgt efter hjælp i dem men kan ikke få noget af det til at fungere.

Jeg vil lave en upload side på min hp, vha. php. Jeg er noob i php men er interesseret i at lære det.
Jeg har prøvet en masse forskellige scripts jeg har fundet online, men det eneste jeg har kunne få til at uploade noget som helst er dette:

<form enctype="multipart/form-data" action="upload.php" method="POST">
Please choose a file: <input name="uploaded" type="file" /><br />
<input type="submit" value="Upload" />
</form>

<?php
$target = "upload/";
$target = $target . basename( $_FILES['uploaded']['name']) ;
$ok=1;

//This is our size condition
if ($uploaded_size > 35000)
{
echo "Your file is too large.<br>";
$ok=0;
}

//This is our limit file type condition
if ($uploaded_type =="text/php")
{
echo "No PHP files<br>";
$ok=0;
}

//Here we check that $ok was not set to 0 by an error
if ($ok==0)
{
Echo "Sorry your file was not uploaded";
}

//If everything is ok we try to upload it
else
{
if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target))
{
echo "The file ".basename( $_FILES['uploadedfile']['name']). " has been uploaded";
}
else
{
echo "Sorry, there was a problem uploading your file.";
}
}
?>

Problemet er bare, at det godkender hvad som helst. Jeg kan uploade filer uanset størrelse, uanset type osv. Jeg vil godt have det begrænset til at være filer mindre en 4 mb, og det må være diverse billed tyoer (jpg, bmp, gif, png) og pakkede filer (.rar, .zip og evt linux formater) og det må også være pdf.

Kan i hjælpe mig med at modificere dette script så det overholder disse restrictions?
På forhånd tak!

/Dasch
Avatar billede michael_stim Ekspert
23. januar 2008 - 14:09 #1
Du har ikke givet dine variabler værdier.
Avatar billede michael_stim Ekspert
23. januar 2008 - 14:11 #2
$uploaded_type=$_FILE['uploaded']['type'];

Er ikke lige sikker på syntaxen, men noget a lá det.
Avatar billede dasch87 Nybegynder
23. januar 2008 - 14:12 #3
Er det sådan at du kan skrive det om så de får værdier? jeg er helt noob i php så er ikke så sikker i det.
Avatar billede michael_stim Ekspert
23. januar 2008 - 14:13 #4
Du lærer nu mest af at gøre det selv ;o)

Læs Jakobs artikler:

http://www.eksperten.dk/artikler/index.phtml?users=jakobdo
Avatar billede michael_stim Ekspert
23. januar 2008 - 14:21 #5
//This is our size condition
if ($_FILES[uploaded][size] > 35000)
{
echo "Your file is too large.<br>";
$ok=0;
}

//This is our limit file type condition
if ($_FILES['uploaded']['type']=="text/php")
{
echo "No PHP files<br>";
$ok=0;
}
Avatar billede dasch87 Nybegynder
23. januar 2008 - 14:44 #6
jeg har prøvet at benytte Jakobs artikel men jeg kunne ikke få det til at virke.:!
jeg har rettet det til med dine ændringer og nu virker størrelses begrænsningen., men kan du sige mig hvad den måler i? er det kb eller?
Men begrænsningen på ikke at uploade php filer virker ikke:( kan man eventuelt ændre det således at i stedet for at sige hvilket man ikke godkender så skrive hvilke man netop godkender? Og tak for de hurtige svar.
Avatar billede dasch87 Nybegynder
23. januar 2008 - 14:53 #7
Der er faktisk også nogle andre fejl med scriptet. Når man åbner siden står der:
Sorry, there was a problem uploading your file.
under upload knappen. og når man så uploader en fil er det meningen at den skal vise filnavnet., men det gør den ikke:(
Avatar billede michael_stim Ekspert
23. januar 2008 - 14:59 #8
Den måler i bytes.

Du kan lave et array med tilladte typer $typer=array('txt', 'doc', osv...);

Og så checke med filnavnet.

if(in_array(din_filendelse i filnavnet, $typer)){
Avatar billede michael_stim Ekspert
23. januar 2008 - 15:05 #9
Og filtypen kan du finde på denne måde:
$filtype = strtolower(end(explode(".",$_FILES['uploaded']['name'])));

if(in_array($filtype, $typer)){
Avatar billede michael_stim Ekspert
23. januar 2008 - 15:09 #10
Grunden til at den skriver noget på siden når du kommer ind, er at du ikke checker om der bliver sat en action på submit-knappen.

<?php
if(isset($_POST['Upload'])){
//Her skriver du den kode der skal trigges, når du klikker på knappen
Avatar billede dasch87 Nybegynder
23. januar 2008 - 15:21 #11
okay nice., er det sådan at jeg kan få dig til at skrive det ind i scriptet så det virker med tilladte type: jpg, bmp, gif, pdf, txt, rar og zip..?
Hvis du gider gøre det er det super lækkert., og hvis du så smider det som et svar får du dine velfortjente point:D
Avatar billede michael_stim Ekspert
23. januar 2008 - 15:26 #12
if ($_FILES[uploaded][size] > 35000)
{
echo "Your file is too large.<br>";
$ok=0;
}

//This is our limit file type condition
$typer=array('jpg', 'bmp', 'gif', 'pdf', 'txt', 'rar', 'zip');
$filtype = strtolower(end(explode(".",$_FILES['uploaded']['name'])));

if(!in_array($filtype, $typer)){
echo "Not an allowed file type.<br>";
$ok=0;
}
Avatar billede dasch87 Nybegynder
23. januar 2008 - 15:35 #13
super.., det fungerer:D smider du et svar michael?
Kan du sige mig hvor meget af koden jeg skal sætte inden for brackets'ne i
if(isset($_POST['Upload'])){ HER ALTSÅ }..?
For jeg troede det var al php'koden., men så virkede det ikke:S
Men i hvert fald tusind tak for din meget hjælp:D og ja svar så får du point:D
Avatar billede michael_stim Ekspert
23. januar 2008 - 15:39 #14
Der burde ikke være noget i vejen for at du sætter alt ind i if(isset...
Men sæt din php kode længst op. Og glem ikke afsluttende tuborgklamme.

Samler ikke på point, ellers tak ;o) Læg selv et svar og accepter.
Avatar billede dasch87 Nybegynder
23. januar 2008 - 16:21 #15
Super. Er der evt noget andet man kan bruge end det der if(isset... for når jeg sætter den ind lige efter <?php og så sætter en slut tuborg mere lige før ?> så forsvinder den konstante tekst godt nok.., men den vil ikke uploade noget og viser heller ingen tekst efter man har trykket "Upload"..:S
Avatar billede dasch87 Nybegynder
23. januar 2008 - 16:31 #16
oh og der er forresten stadig et problem med at den ikke viser navnet på den fil der er uploaded.:S altså den læser ikke det der står i "", dvs. .basename( $_FILES['uploadedfile']['name']). .., er det evt sådan du har et quick fix til dette?
Avatar billede dasch87 Nybegynder
23. januar 2008 - 19:19 #17
Nå men jeg fandt ud af at få det til at virke, og jeg endte op med følgende kode (hvis der er andre der kan bruge det). Jeg ved ikke hvorfor men uanset hvor meget jeg sætter størrelsen til kan jeg maks få den til at uploade filer på ca 16 mb. Men her er koden:
<form enctype="multipart/form-data" action="upload.php" method="POST">
    Please choose a file: <input name="upload_file" type="file" /><br />
    <input name="upload_submit" type="submit" value="Upload" />
</form>

<?php
    if(isset($_POST['upload_submit'])) {
        $target = 'upload/' . basename($_FILES['upload_file']['name']);
        $typer = array('jpg', 'jpeg', 'bmp', 'gif', 'pdf', 'txt', 'rar', 'zip');
        $filtype = strtolower(end(explode(".",$_FILES['upload_file']['name'])));
        $ok = true;

        if($_FILES['upload_file']['size'] > 100000000) {
            echo "Your file is too large.<br>";
            $ok = false;
        }

        if(!in_array($filtype, $typer)) {
            echo "Not an allowed file type.<br>";
            $ok = false;
        }

        if($ok) {
            if(move_uploaded_file($_FILES['upload_file']['tmp_name'], $target)) {
                echo "The file ".basename($_FILES['upload_file']['name']). " has been uploaded";
            } else {
                echo "Sorry, there was a problem uploading your file.";
            }
        }
    }
?>
Avatar billede michael_stim Ekspert
23. januar 2008 - 19:46 #18
Det er noget du sætter i din php.ini fil. Men de fleste webhoteller har kun default på 2 MB.
Avatar billede dasch87 Nybegynder
28. februar 2008 - 19:24 #19
Undskyld der er gået så langtid før jeg svarer.., det er min onkels server så han har ændret det.., så det hele kører.., endnu engang tusind tak for hjælpen: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