Avatar billede maarten Nybegynder
15. juni 2004 - 12:54 Der er 36 kommentarer og
2 løsninger

Hvem kan hjælpe mig med at lave et upload script?

Hej eksperter!

Det ville være rigtigt dejligt, hvis i gad at lave/hjælpe mig med at lave et upload script. Jeg er en nybegynder, så hvis i gider at hjælpe mig lidt på vej.
Jeg har dog nogle krav:

  -Det skal være simpelt.
  -Man skal logge på, for at komme ind og uploade.


Håber ikke at det er for svært?
På forhånd tak.
Avatar billede Slettet bruger
15. juni 2004 - 12:59 #1
Her kan du følge en guide. Så lære du også selv noget ved det :)
http://www.webcafe.dk/artikler/php/upload/

Her er et lille simpel login script. Så kan du også det fremover.
http://www.webcafe.dk/tipsogtricks/php/simpeltloginmedphp.html

Bemærk, at hvis du skal have flere brugere til at kunne uploade, kan du enten gøre det via scriptet, eller lave noget med en SQL database :)
Avatar billede maarten Nybegynder
15. juni 2004 - 13:02 #2
Jeg er som sagt nybegynder. Ved ikke så meget om SQL.
Avatar billede Slettet bruger
15. juni 2004 - 13:06 #3
Avatar billede maarten Nybegynder
15. juni 2004 - 13:09 #4
Under http://www.webcafe.dk/artikler/php/upload/
Og overskriften "Koden, der tager imod den uploadede fil"
Tror du ikke at du kan forklare det?
Avatar billede Slettet bruger
15. juni 2004 - 13:15 #5
Well linket jeg gav til dig, med loginsystemet køre heller ikke over SQL.
Var blot en bemærkning, da det er noget nemmere at holde styr på sine brugere. Men det kan sagtens køre uden SQL med flere brugere.

Koden ser sådan ud:

$konfiguration["upload_bibliotek"] = "./updir";
$konfiguration["max_stoerrelse"] = "10";

Den første linje er hvor du gerne vil have filerne til at ligge, når de er uploaded.
Den næste linje er hvor meget den enkelte fil må fylde. I dette tilfælde 10 mb.

Håber det gav lidt indblik i scriptet.
Avatar billede maarten Nybegynder
15. juni 2004 - 13:16 #6
Hvor skal jeg sætte det ind henne?
Avatar billede maarten Nybegynder
15. juni 2004 - 13:17 #7
De siger jeg skal gemme det i et array?
Avatar billede Slettet bruger
15. juni 2004 - 13:28 #8
Hele upload scriptet, skal se ud som nedenfor.
Jeg har blot samlet de forskellige ting.

Du skal bruge to filer.
Jeg har desuden også lige tilføjet lidt til scriptet, så du kan bestemme hvilket type filer du vil have uploaded.
Det er smart, da brugerne ellers kunne uploade filer der kunne skade dit system, eller måske finde passwords eller andet.

Lav en der hedder upload.php med følgende indhold:

<?PHP
echo '
    <form action="do-upload.php" method="post" enctype="multipart/form-data">
      <b>Fil til upload:</b>
      <input type="file" name="upfil" />
      <input type="submit" value="upload" />
    </form>
';
?>

Så skal du have en fil der hedder do-upload.php med følgende indhold:

<?PHP

// her gemmes filerne
$konfiguration["upload_bibliotek"] = "./updir";

// Dette må filerne max fylde. (i MB).
$konfiguration["max_stoerrelse"] = "10";

/* Check PHP-version */
list($major, $minor, $rev) = explode(".", phpversion());
if($major < 4) {
    // Hvis PHP versionen er for gammel, lukker vi scriptet.
    die("Jeg kan kun arbejde med PHP 4.0.0 eller derover");
}

/* Skab de "moderne" arrays hvis vi arbejder med en aeldre PHP */
if($minor < 1) {
    $_FILES = $HTTP_POST_FILES;
    $_POST = $HTTP_POST_VARS;
    $_SERVER = $HTTP_SERVER_VARS;
}

/* Hvor flytter vi fra og til */
$fra = $_FILES["upfil"]["tmp_name"];
$til = $konfiguration["upload_bibliotek"] . "/" . $_FILES["upfil"]["name"];

/* Accepterer vi filens stoerrelse? */
$fil_stoerrelse = filesize($fra)/1024;
if($fil_stoerrelse > $konfiguration["max_stoerrelse"]) {
    die("Desværre - filen er for stor. Jeg accepterer kun " .
    $konfiguration["max_stoerrelse"] . "kb, og din fil fylder " .
    ceil($fil_stoerrelse, 1) . " kb");
}

// For at gøre det mere sikkert, kan du selv bestemme hvilket type filer brugerne må uploade
// Dette er smart, da de ellers ville kunne uploade perl script, php script, eller andet der kan skade dig.

$ext = strtolower(end(explode(".", $_FILES['upfil']['name'])));
if($ext != "jpg" || $ext != "mpg" || $ext != "swf") {
    die("Jeg vil kun have jpg, mpg eller swf filer uploaded!");
}

/* Saa koerer vi */
if(function_exists("move_uploaded_file")) {
    move_uploaded_file($fra, $til);
} else {
    copy($fra, $til);
}

// Filen er nu uploaded, og vi sender dig tilbage til upload siden.
header("Location: upload.php");
exit;

?>
Avatar billede maarten Nybegynder
15. juni 2004 - 13:40 #9
Hvor kan jeg vælge hvilke extensions jeg vil tillade?
Avatar billede maarten Nybegynder
15. juni 2004 - 13:44 #10
http://www.mortenbo.net/upload.php
Dette er hvad du har lavet til mig.
Avatar billede Slettet bruger
15. juni 2004 - 14:02 #11
Du vælger hvilket extensions du vil tillade her:
if($ext != "jpg" || $ext != "mpg" || $ext != "swf") {

linjen betyder "Hvis $ext er forskellige fra jpg eller mpg eller swf så lukker scriptet.
Avatar billede maarten Nybegynder
15. juni 2004 - 14:05 #12
Ok, men jeg kan ikke få det til at virke. Kan du ikke lave et, hvor man kan uploade disse extensions:

  -txt
  -doc
  -jpg
  -bmp

Og hvor der er kodeord i starten og så kommer man ind på upload siden, og man må højst uploade 10 mb. Tror du ikke at du kan klare det? Du får nogle velfortjente point og måske endnu flere.
Avatar billede maarten Nybegynder
15. juni 2004 - 14:46 #13
Kan det klares?
Avatar billede Slettet bruger
15. juni 2004 - 14:49 #14
Hvad er det du ikke kan få til at virke?

Så skal det se således ud:
if($ext != "txt" || $ext != "doc" || $ext != "jpg" || $ext != "bmp") {
Avatar billede maarten Nybegynder
15. juni 2004 - 15:21 #15
Jamen det er fordi, jeg har disse filer. Og hvad skal jeg så gøre?
Avatar billede Slettet bruger
15. juni 2004 - 15:31 #16
Når du har smidt indholdet i filerne, uploader du dem til dit webhotel og køre filen upload.php

Så skulle du gerne kunne gennemse/browse efter en fil på din computer og trykke upload.
Avatar billede maarten Nybegynder
15. juni 2004 - 15:38 #17
http://www.mortenbo.net/upload.php:
Der kan du se at det ikke virker.
Avatar billede maarten Nybegynder
15. juni 2004 - 15:44 #18
Uanset hvilken extension jeg vælger, så gider den ikke.
Avatar billede Slettet bruger
15. juni 2004 - 15:45 #19
sorry, min fejl. Din do-upload.php skal se sådan ud:


<?PHP

// her gemmes filerne
$konfiguration["upload_bibliotek"] = "./updir";

// Dette må filerne max fylde. (i MB).
$konfiguration["max_stoerrelse"] = "10";

/* Check PHP-version */
list($major, $minor, $rev) = explode(".", phpversion());
if($major < 4) {
    // Hvis PHP versionen er for gammel, lukker vi scriptet.
    die("Jeg kan kun arbejde med PHP 4.0.0 eller derover");
}

/* Skab de "moderne" arrays hvis vi arbejder med en aeldre PHP */
if($minor < 1) {
    $_FILES = $HTTP_POST_FILES;
    $_POST = $HTTP_POST_VARS;
    $_SERVER = $HTTP_SERVER_VARS;
}

/* Hvor flytter vi fra og til */
$fra = $_FILES["upfil"]["tmp_name"];
$til = $konfiguration["upload_bibliotek"] . "/" . $_FILES["upfil"]["name"];

/* Accepterer vi filens stoerrelse? */
$fil_stoerrelse = filesize($fra)/1024;
if($fil_stoerrelse > $konfiguration["max_stoerrelse"]) {
    die("Desværre - filen er for stor. Jeg accepterer kun " .
    $konfiguration["max_stoerrelse"] . "kb, og din fil fylder " .
    ceil($fil_stoerrelse, 1) . " kb");
}

// For at gøre det mere sikkert, kan du selv bestemme hvilket type filer brugerne må uploade
// Dette er smart, da de ellers ville kunne uploade perl script, php script, eller andet der kan skade dig.

$ext = strtolower(end(explode(".", $_FILES['upfil']['name'])));

echo $ext;

if($ext == "txt" || $ext == "doc" || $ext == "jpg" || $ext == "bmp") {
    /* Saa koerer vi */
    if(function_exists("move_uploaded_file")) {
        move_uploaded_file($fra, $til);
    } else {
        copy($fra, $til);
    }
   
    // Filen er nu uploaded, og vi sender dig tilbage til upload siden.
    header("Location: upload.php");
    exit;   
} else {
    die("Jeg vil kun have jpg, mpg eller swf filer uploaded!");
}
?>
Avatar billede maarten Nybegynder
15. juni 2004 - 15:48 #20
Prøv at se nu.
Avatar billede maarten Nybegynder
15. juni 2004 - 15:50 #21
Fejl besked:
jpg
Warning: move_uploaded_file(./updir/Corey1.jpg): failed to open stream: No such file or directory in /customers/mortenbo.net/mortenbo.net/httpd.www/do-upload.php on line 45

Warning: move_uploaded_file(): Unable to move '/tmp/phpnOGS9c' to './updir/Corey1.jpg' in /customers/mortenbo.net/mortenbo.net/httpd.www/do-upload.php on line 45

Warning: Cannot modify header information - headers already sent by (output started at /customers/mortenbo.net/mortenbo.net/httpd.www/do-upload.php:40) in /customers/mortenbo.net/mortenbo.net/httpd.www/do-upload.php on line 51
Avatar billede Slettet bruger
15. juni 2004 - 15:52 #22
linjen: echo $ext; kan du blot slette :)
Det var blot for lige at teste.

Den kommer med den fejl nu, fordi den enten ikke kan finde mappen ./updir
ændre variablen $konfiguration["upload_bibliotek"] = "./updir"; til f.eks.
$konfiguration["upload_bibliotek"] = "./upload/";

Så skal du blot oprette en mappe der hedder upload i samme mappe som de to upload filer, og give den skriveadgang (chmod 777).
Avatar billede maarten Nybegynder
15. juni 2004 - 16:01 #23
Og når jeg så uploader, kommer de filer automatisk ind i den mappe?
Avatar billede Slettet bruger
15. juni 2004 - 16:01 #24
jeps :)
Avatar billede maarten Nybegynder
15. juni 2004 - 16:05 #25
Det var nu ikke det jeg tænkte på. Jeg tænkte på at man kunne uploade og så kunne man se det inde på hjemmesiden. Og så skulle man naturligvis have et kodeord først. Så alle ikke bare kunne komme ind.
Avatar billede Slettet bruger
15. juni 2004 - 16:09 #26
Det kan du jo også.
Enten kan du bruge noget htaccess til at ligge password på mappen hvor filerne er uploaded til. Eller også kan du lave et php script, som henter alle filerne i mappen, og viser dem.
Avatar billede maarten Nybegynder
15. juni 2004 - 16:12 #27
Hehe, jeg er alt for krævende, men hvordan gør man så det? :D
Avatar billede Slettet bruger
15. juni 2004 - 16:13 #28
heh det går nok :)

Du kunne bruge et script som dette.
Så skal du naturligvis blot bruge guiden til at lave passwords med som jeg gav tidligere. Dette implantere du så blot i scriptet. Så skulle du være køreklar.

<?php

$bibliotek = "upload";

function list_filer($bibliotek)
{
    if ($bib = @opendir($bibliotek)) {
        while (false !== ($fil = readdir($bib))) {
            if ($fil != '.' && $fil != '..' && !ereg('^\..+', $fil)) {
                $fil_liste[] = "<a href=\"$bibliotek/$fil\">$fil</a>";
            }
        } 
 
        closedir($bib);
     
        if (is_array($fil_liste)) {
            $liste = '<li>' . join('</li><li>', $fil_liste) . '</li>';
        } else {
            $liste = '<li>Ingen filer p&aring; lager</li>';
        }
     
        $fil_lager = "<h2>Uploaded files :D</h2><ul>$liste</ul>";
        return $fil_lager;
    } else {
        die("Kunne ikke &aring;bne biblioteket: $bibliotek");
    }
}

echo list_filer('.');
?>
Avatar billede maarten Nybegynder
15. juni 2004 - 16:15 #29
I hvilken af filerne? upload.php eller do-upload.php?
Avatar billede Slettet bruger
15. juni 2004 - 16:16 #30
Det opretter du som en ny fil.
F.eks. vis.php
Avatar billede Slettet bruger
15. juni 2004 - 16:19 #31
Koden er ikke skrevet af mig selv, så kan da se at der er lidt fejl i det.
Prøv sådan her:

<?php

function list_filer($bibliotek)
{
    if ($bib = @opendir($bibliotek)) {
        while (false !== ($fil = readdir($bib))) {
            if ($fil != '.' && $fil != '..' && !ereg('^\..+', $fil)) {
                $fil_liste[] = "<a href=\"$bibliotek/$fil\">$fil</a>";
            }
        } 
 
        closedir($bib);
     
        if (is_array($fil_liste)) {
            $liste = '<li>' . join('</li><li>', $fil_liste) . '</li>';
        } else {
            $liste = '<li>Ingen filer p&aring; lager</li>';
        }
     
        $fil_lager = "<h2>Uploaded files :D</h2><ul>$liste</ul>";
        return $fil_lager;
    } else {
        die("Kunne ikke &aring;bne biblioteket: $bibliotek");
    }
}

echo list_filer("upload/");
?>
Avatar billede maarten Nybegynder
15. juni 2004 - 16:24 #32
http://www.mortenbo.net/upload/upload.php <-- Nu virker det i hvert fald. Tusind tak. Det eneste jeg mangler er nu et kodeord.
Avatar billede Slettet bruger
15. juni 2004 - 16:36 #33
Det går jo fremad.
Din vis.php kan du så lave sådan:


<?PHP
if(!isset($_REQUEST["b_navn"]) OR !isset($_REQUEST["p_word"])){
    // Hvis brugeren ikke er logget ind, viser vi en login box:
   
    echo '
        <form method="post" action="">
          Brugernavn: <input type="text" name="b_navn"><br />
          Password: <input type="password" name="p_word"><br />
          <input type="submit" value="Log ind nu...">
        </form>
    ';
    exit;
} else {

    $brugernavn = "abc";
    $password = "123";

    if($_REQUEST["b_navn"] != $brugernavn OR $_REQUEST["p_word"] != $password){
        // Fejlmeddelelse
        echo "Forkert login";
        exit;
    } else{

        function list_filer($bibliotek)
        {
            if ($bib = @opendir($bibliotek)) {
                while (false !== ($fil = readdir($bib))) {
                    if ($fil != '.' && $fil != '..' && !ereg('^\..+', $fil)) {
                        $fil_liste[] = "<a href=\"$bibliotek/$fil\">$fil</a>";
                    }
                }
   
                closedir($bib);
       
                if (is_array($fil_liste)) {
                    $liste = '<li>' . join('</li><li>', $fil_liste) . '</li>';
                } else {
                    $liste = '<li>Ingen filer p&aring; lager</li>';
                }
   
                $fil_lager = "<h2>Uploaded files :D</h2><ul>$liste</ul>";
                return $fil_lager;
            } else {
                die("Kunne ikke &aring;bne biblioteket: $bibliotek");
            }
        }
    }
   
    echo list_filer("exp/");
}
?>
Avatar billede maarten Nybegynder
15. juni 2004 - 16:46 #34
Ok, så skal det være sådan at når jeg går ind på linket, skal jeg skrive koden først.
Avatar billede maarten Nybegynder
15. juni 2004 - 16:52 #35
Hmm.. Det virker nu, men når jeg logger ind så siger den at den ikke kunne åbne biblioteket exp/
Avatar billede Slettet bruger
15. juni 2004 - 18:23 #36
det er fordi biblioteket hedder upload/
bare ret linjen: echo list_filer("exp/"); til echo list_filer("upload/");

Det var blot fordi jeg testede :o)
Avatar billede Slettet bruger
15. juni 2004 - 18:23 #37
og tak for points.
Avatar billede engberg Juniormester
11. april 2005 - 16:31 #38
Kunne man forhindre at den overskriver allerede uploadede filer med samme navn?? Evt. ved at rename?
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