Avatar billede dumazz.dk Nybegynder
15. maj 2005 - 17:03 Der er 13 kommentarer og
1 løsning

Meget simpelt upload-script

Hej,

Jeg mangler et upload-script... Alt MySQL-stadset laver jeg selv...

Scriptet skal blot kunne filtrere på filendelsen, og MIME-typen
Avatar billede coderdk Praktikant
15. maj 2005 - 20:09 #1
Prøv dette, det er ikke testet:

<?php

    define( 'FOLDER', 'uploads/' );
   
    $ok_ext = array( 'jpg', 'gif', 'png', 'zip' );
    $ok_mime = array( 'image/jpeg', 'image/pjpeg', 'image/gif', 'image/png', 'application/x-zip-compressed' );

    if ( empty( $_GET['ok'] ) && !empty( $_FILES ) )
    {
        if ( is_uploaded_file( $_FILES['fil']['tmp_name'] ) )
        {
            if ( strpos( '.', $_FILES['fil']['name'] ) == 1 )
            {
                $msg = 'noext';
            }
            else
            {
                $ext = strtolower( end( explode( $_FILES['fil']['name'] ) ) );
                if ( !in_array( $ext, $ok_ext ) )
                {
                    $msg = 'notokext';
                }
                else
                {
                    if ( !in_array( $_FILES['fil']['type'] ) )
                    {
                        $msg = 'notokmime';
                    }
                    else
                    {
                        // Gem i database osv her
                        $nytnavn = FOLDER . uniqid( basename( $_FILES['fil']['name'] ) );
                        move_uploaded_file( $_FILES['fil']['tmp_name'], $nytnavn );
                        $msg = 'ok';
                    }
                }
            }
        }
        header( 'location: ' . $_SERVER['PHP_SELF'] . '?msg=' . $msg );
        exit;
    }
   
    if ( !empty( $_GET['ok'] ) )
    {
        switch ( $_GET['ok'] )
        {
            case 'ok':
                echo 'Ok, fil uploaded!';
                break;
            case 'noext':
            case 'notokext':
                echo 'Forbudt efternavn ;)';
                break;
            case 'notokmime':
                echo 'Ikke tilladt mime ;)';
                break;
        }
    }

?>
<form method="post" action="<?= $_SERVER['PHP_SELF'] ?>" enctype="multipart/form-data">
    Fil: <input type="file" name="fil" />
    <button type="submit">Upload</button>
</form>
Avatar billede coderdk Praktikant
15. maj 2005 - 20:10 #2
Hvis det kun er billeder du vil uploade, ville jeg i stedet bruge getimagesize() til at finde ud af om det var et billede af den rigtige type...
Avatar billede dumazz.dk Nybegynder
15. maj 2005 - 20:29 #3
Har modificeret den, så den passer ind i et include:

---

<?php

    define( 'FOLDER', 'files/' );
   
    $ok_ext = array( 'jpg', 'gif', 'png', 'pdf' );
    $ok_mime = array( 'image/jpeg', 'image/pjpeg', 'image/gif', 'image/png', '');

    if ( empty( $_GET['ok'] ) && !empty( $_FILES ) )
    {
        if ( is_uploaded_file( $_FILES['fil']['tmp_name'] ) )
        {
            if ( strpos( '.', $_FILES['fil']['name'] ) == 1 )
            {
                $msg = 'noext';
            }
            else
            {
                $ext = strtolower( end( explode( $_FILES['fil']['name'] ) ) );
                if ( !in_array( $ext, $ok_ext ) )
                {
                    $msg = 'notokext';
                }
                else
                {
                    if ( !in_array( $_FILES['fil']['type'] ) )
                    {
                        $msg = 'notokmime';
                    }
                    else
                    {
                        // Gem i database osv her
                        $nytnavn = FOLDER . uniqid( basename( $_FILES['fil']['name'] ) );
                        move_uploaded_file( $_FILES['fil']['tmp_name'], $nytnavn );
                        $msg = 'ok';
                    }
                }
            }
        }
        header('location:?side=upload&msg=$msg');
        exit;
    }
   
    if ( !empty( $_GET['ok'] ) )
    {
        switch ( $_GET['ok'] )
        {
            case 'ok':
                echo 'Filen er uploadet';
                break;
            case 'noext':
            case 'notokext':
                echo 'Forbudt \"Efternavn\";)';
                break;
            case 'notokmime':
                echo 'Ikke tilladt filtype - kun billeder og pdf-filer er tilladte ;)';
                break;
        }
    }

?>
<form method="post" action="?side=upload" enctype="multipart/form-data">
    Fil: <input type="file" name="fil" />
    <button type="submit">Upload</button>
</form>

---

Det fungerer ikke - Hopper tilbage til upload-siden - skriver intet - og ingen filer er uploadet
Avatar billede coderdk Praktikant
15. maj 2005 - 20:44 #4
header('location:?side=upload&msg=$msg');

skal være:

header('location:?side=upload&msg=' . $msg);
Avatar billede dumazz.dk Nybegynder
15. maj 2005 - 20:49 #5
Ja, jeg opdagede det, lige efter at have posted her på exp.dk

Det virker dog alligevel ikke...
Avatar billede coderdk Praktikant
15. maj 2005 - 21:11 #6
Hvad er fejlen så?
Avatar billede dumazz.dk Nybegynder
15. maj 2005 - 23:10 #7
Aner det ikke...

ingen fejltekst - ingen uploadede filer - intet...
Avatar billede coderdk Praktikant
16. maj 2005 - 00:09 #8
PDF skal også være med for øvrigt - Har du prøvet med jpeg billeder?

$ok_mime = array( 'image/jpeg', 'image/pjpeg', 'image/gif', 'image/png', 'application/pdf');
Avatar billede dumazz.dk Nybegynder
17. maj 2005 - 13:37 #9
Det var billeder jeg prøvede med...
Avatar billede coderdk Praktikant
17. maj 2005 - 13:40 #10
Hvordan ser URL'en ud når du prøver? Altså msg= hvad?
Avatar billede dumazz.dk Nybegynder
17. maj 2005 - 14:02 #11
&msg=notokext
Avatar billede dumazz.dk Nybegynder
17. maj 2005 - 14:05 #12
Har prøvet at ændre lidt i koden:

                $ext = strtolower( end( explode( $_FILES['fil']['name'] ) ) );
                if ( !in_array( $ext, $ok_ext ) )
                {
                    $msg = "$ext";
                }

Det viser sig, at $ext ikke indeholder noget... Hvordan kan det være?
Avatar billede dumazz.dk Nybegynder
17. maj 2005 - 14:09 #13
Prøvede at åbne i mozilla, istedet for konqueror...

Den giver fejlene:



Warning: Wrong parameter count for explode() in /usr/home/dan11625/public_html/ny/upload.php on line 18

Warning: end(): Passed variable is not an array or object in /usr/home/dan11625/public_html/ny/upload.php on line 18

Warning: Cannot modify header information - headers already sent by (output started at /usr/home/dan11625/public_html/ny/index.php:65) in /usr/home/dan11625/public_html/ny/upload.php on line 39

Arghh... Det header-pjat ... kan det ikke undgåes?
Avatar billede dumazz.dk Nybegynder
17. maj 2005 - 14:16 #14
Koden ser nu sådan ud:

---

<?php

    define( 'FOLDER', 'files/' );
   
    $ok_ext = array( 'jpg', 'gif', 'png', 'pdf' );
    $ok_mime = array( 'image/jpeg', 'image/pjpeg', 'image/gif', 'image/png');

    if ( empty( $_GET['ok'] ) && !empty( $_FILES ) )
    {
        if ( is_uploaded_file( $_FILES['fil']['tmp_name'] ) )
        {
            if ( strpos( '.', $_FILES['fil']['name'] ) == 1 )
            {
                $msg = 'Hmmm???';
            }
            else
            {
                $ext = strtolower( end( explode( $_FILES['fil']['name'] ) ) );
                if ( !in_array( $ext, $ok_ext ) )
                {
                    $msg = "Forbudt efternavn...";
                }
                else
                {
                    if ( !in_array( $_FILES['fil']['type'] ) )
                    {
                        $msg = 'Ikke tilladt filtype - kun billeder og pdf-filer er tilladte...';
                    }
                    else
                    {
                        // Gem i database osv her
                        $nytnavn = FOLDER . uniqid( basename( $_FILES['fil']['name'] ) );
                        move_uploaded_file( $_FILES['fil']['tmp_name'], $nytnavn );
                        $msg = 'ok';
                    }
                }
            }
        }
    }


echo"<br>$msg<br>";
?>
<form method="post" action="?side=upload" enctype="multipart/form-data">
    Fil: <input type="file" name="fil" />
    <button type="submit">Upload</button>
</form>

---

Se evt. http://kfums-soldatermission.dk/ny/?side=upload

Hvad er galt?
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

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