15. juni 2004 - 12:54Der 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.
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.
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.
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:
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;
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.
Uanset hvilken extension jeg vælger, så gider den ikke.
Synes godt om
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.
// 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!"); } ?>
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
Synes godt om
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).
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.
Synes godt om
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.
Hehe, jeg er alt for krævende, men hvordan gør man så det? :D
Synes godt om
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>"; } }
Kunne man forhindre at den overskriver allerede uploadede filer med samme navn?? Evt. ved at rename?
Synes godt om
Ny brugerNybegynder
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.