7
Tags:
php
Skrevet af
Bruger #285
@ 29.04.2003
Introduktion
For at bruge dette system, skal der være PHP (med GD-Lib) og MySQL på serveren.
Denne artikel vil handle om, hvordan man lavet et billedupload-system, hvor billeder bliver lagt op på serveren. Hvis de er for store, så bliver de resizet. Disse thumbnails vil så blive vist på en side, der bliver genereret ud fra nogle data i en tabel (disse data ligger vi ind, når vi uploader billedet). Når man trykker på et thumbnail, bliver det store billede vist i et nyt browser vindue.
Det kan virke meget mærkeligt, at jeg vælger at bruge MySQL database til dette system. Dog har jeg valgt det, da mange sikkert vil vælge at udbygge systemet.
Da min filosofi, når man skal lære noget, er, at det hele ikke skal serveres på et sølvfad, kommer der i denne artikel ikke 15 siders blandet html og php-kode. Der vil selvfølgelig komme noget php-kode, bare rolig…
Well, let the code begin…
Tabellen i databasen
Det, vi skal bruge databasen til, er at lave det automatiske fotoalbum. Der skal være følgende felter i denne tabel (vi kalder fx tabellen ”billeder”):
id (skal være et auto increasing, unik felt af typen int)
billede (skal være et felt, der indeholder navnet på billedet – dvs. et tekst felt)
tid (dette felt skal bruges, så man kan se, hvornår billedet blev uploadet)
Man kan senere udbygge dette system, så der kan komme forskellige kategorier, måske censur, så kun folk, der er logget ind kan se billederne – man kan også lave sådan, at man kan se, hvem der har uploadet billedet osv. En ideel udvidelse ville være, hvis man lavede sådan, at man kunne lave en beskrivelse til hvert billede.
Sider i dette system
I dette system skal vi bruge nogle sider:
billeder.php (her vil der komme en oversigt over de små billeder)
billeder-upload.php (her vil der være en form, hvor man kan vælge det billede, man vil uploade)
billeder-upload-verify.php (denne side sørger for at uploade billedet)
billeder-upload.php
For at uploade et billede skal man bruge en form. Denne form kunne se sådan ud:
<form action="billeder-upload-verify.php" method="post" enctype="multipart/form-data">
<input type="file" name="fil">
<input type="submit" name="upload" value="Upload">
</form>
Læg mærke til: enctype="multipart/form-data" i formen!
billeder-upload-verify.php
Denne side sørger for at uploade det valgte billede. Når man har valgt et billede på siden billeder-upload.php og trykker på knappen, bliver man sendt til denne side. Det valgte billede bliver samtidig lagt ind i en midlertidig mappe på serveren (her bliver den midlertidige fil slettet, når scriptet er færdig med at køre). Det, denne side skal sørge for, er altså at flytte den midlertidige fil over i et bibliotek i dine biblioteker. Når man skal det, så skal man have ændret rettighederne på den mappe, som man flytter billederne over i. Dette gøres nemmeste med et FTP-program. Rettighederne på mappen, hvor man vil flytte billederne over i, skal være 777!
Som sagt skulle billedet resizes, hvis det var for stort. Xyborx har lavet en funktion, der kan gøre det. Den hedder ”mageresize”, og kan findes på
http://www.xyborx.dk/image.php Der kan dog være et par funktioner, der ikke virker – det kommer an på sin version af det installerede GD-Lib. Det drejer sig om (du kan evt. bruge denne funktion til at checke det med:
http://www.php.net/manual/en/function.function-exists.php):imagecreatetruecolor (brug i stedet imagecreate – men kun, hvis der er problemer)
imagecopyresampled (brug i stedet imagecopyresized – men kun, hvis der er problemer)
Når vi som sagt har valgt et billede på forrige side, og kommer til denne side, så er der nogle variabler:
Billedets originale navn: $_FILES["fil"]["name"]
Den midlertidige fils navn på serveren: $_FILES["fil"]["tmp_name"]
Filens størrelse i bytes $_FILES["fil"]["size"] (kan bruges, hvis det billede man uploader fx maks må fylde 100 kB).
Selve koden til filen (her skal der ikke være nogle HTML-koder i – overhovedet!):
//Her skal filen flyttes fra
$fra = $_FILES['fil']['tmp_name'];
//Hvilken type fil arbejder vi med?
$ext = strtolower(end(explode(".", $_FILES['fil']['name'])));
//Hvis filen er et jpg, jpeg eller gif billede
if($ext == "jpg" || $ext == "jpeg" || $ext == "gif")
{
$tid = time();
//Her giver vi billedet et andet navn, så der ikke kommer to ens navne…
$nytNavn = $tid . ”_” . rand(1, 1000000) . $ext;
//Her er vores destination
$til = "../upload/billeder/large/" . $nytNavn;
//Her sker det magiske:
move_uploaded_file($fra, $til);
//Her resizer vi billedet med Xyborx’s funktion
$newSizeWidth = 75;
$newSizeHeight = 75;
$newSizeDes = "../upload/billeder/small/" . $nytNavn;
imageresize($til, $newSizeWidth, $newSizeHeight, "../upload/billeder/small/" . $nytNavn);
//Her ligges oplysningerne ind databasen – huske at connecte til den!
$query = "INSERT INTO billeder (billede, tid) VALUES ('$billede', '$tid')";
mysql_query($query);
}
header("Location: billeder.php");
billeder.php
Dette er nok den nemmeste side. Den skal laves lige som alt muligt andet – fx tagwall. Vi skal hente nogle informationer fra en database, og derefter vise dem:
$destinationLarge = "../upload/billeder/large/”;
$destinationSmall = "../upload/billeder/small/”;
$queryBillede = "SELECT * FROM billeder ORDER BY id DESC";
$queryBillede = mysql_query($queryBillede);
while($rBillede = mysql_fetch_array($queryBillede))
{
$billede = $rBillede["billede"];
$tid = $rBillede["tid"];
$tid = ”d. ” . date(”d/m-Y”, $tid) . ” kl. ” . date(”H:i:s”, $tid);
echo "
<a href="” . $destinationLarge . $billede . ”">
<img src="” . $destinationSmall . $billede . ”" border="0">
</a> ";
}
Afsluttende bemærkning
Princippet med at uploade andre filer er akkurat magen til dette. Jeg har lavet dette skelet på denne måde, så man nemt kan udvide det med fx billedbeskrivelse.
Der kan tit være mange problemer i forbindelse med at uploade filer. En stor del af disse problemer er, at rettighederne på det bibliotek, man prøver at uploade til ikke er sat rigtigt. De skal være 777!
Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.
Del også gerne artiklen med dine Facebook venner:
Kommentarer (55)
Skriv endelig nogle kommentarer - ris, ros og/eller rettelser...
Har set, at der nogle steder er sådanne tegn:
” - det skal være " (anførselstegn)!
Doesn't work...
Hvordan virker det ikke? Melder et fejl?
Billeder.php melder fejl i linje 12, Parse Error
Kan ikke se nogle fejl... Har du udskiftet ” med " ?
Jep
hmm pga. 1 er bare forde skal lige skrive en komentar men... kan du ikke rette den guide?
Så fik jeg endelig min server op igen (sry for nedetiden). Jeg har rettet en del i image.php så den nu bla. selv finder ud af det med imagecreatetruecolor/imagecreate samt imagecopyresampled/imagecopyresize.
Og så vil jeg da lige sige tak for at nogen benytter mit script
Det er altid en fornøjelse at se at andre kan bruge det man udgiver
(btw.. mit nick er med stort X både først og sidst ;P)
Jeg er absolut ikke en kodehaj, men er på udkig efter denne funktionalitet...
Har kigget på
http://gallery.menalto.com/ men kan ikke få det til at virke, bla.a. fordi jeg ikke kan slå safe-mode fra hos min udbyder !!!
Mvh
ThujaKing
Glemte jo lige mit spørgsmål...
Hvordan får jeg et gallery op og køre når jeg ikke har en s... forstand på at kode ???
Mvh
ThujaKing
Start med at lave noget mindre indtil du lærer det. "Man skal kunne kravle før man kan gå..."
Jeg får samme fejl meddelse som sune, hvad er der galt her?
bruger i copy'n paste ?
skod lort, prøv at lave noget som også virker?
Husk at ” skal være " (anførselstegn)!
god artikkel men xyborx siden er nede.. skal man ikke bruge de funktioner?
bare lige en kommentar til sune og Martin. Har i sat <? ?> udenom koderne for det ser lidt ud som om de mangler
Jeg er ked at min server har været nede i noget tid, og den vil ikke køre særligt stabilt foreløbigt.
www.xyborx.dk/image.php skulle dog virke nu. Hvis nogen har mulighed for at lægge det op på en mere stabil server, skal I være velkomne.
NB: Ustabiliteten skyldes ikke en dårlig server/forbindelse, men at jeg skal spare på strømmen. Serveren er derfor lukket om natten og formiddagen, når jeg ikke selv bruger den.
Jeg Kan ikke få det til at virke den skiver at der er en "unexpected T_VARIABLE" i linje 74. Min linje 74 ser således ud "$fra = $_FILES['fil']['tmp_name'];"
Nogle der kan sige mig hvad fejlen er???
/*************************************************************\\
* Image resizer, version 2.0 - Mar9,2003 *
* Returns true on success, false if there are errors *
* If destination file is specified, resized picture will be *
* saved with the specified name. Else, it is shown to browser *
* Version 2: Now scales both up and down, still preserving *
* aspect ratio, and it accepts not only jpeg, but *
* also png and possibly bmp *
}*************************************************************{
* Created by XyborX (www.xyborx.dk) *
* Feel free to use, modify and distribute, without profit. *
* I cannot be held liable for any damage this script might do *
\\*************************************************************/
function imageresize($sourcefile,$maxwidth,$maxheight,$destinationfile=false)
{
$types=Array();
$types[1]='gif';
$types[2]='jpeg';
$types[3]='png';
$types[6]='wbmp';
list($width,$height,$type)=getimagesize($sourcefile);
$type_name=$types[$type];
$imagecreatefromtype='imagecreatefrom'.$type_name;
$imagetype='image'.$type_name;
if(!function_exists($imagecreatefromtype) || !function_exists($imagetype))
{
return false;
}
if($img_src=$imagecreatefromtype($sourcefile))
{
$ratio_height=$maxheight/$height;
$ratio_width=$maxwidth/$width;
$ratio=min($ratio_width,$ratio_height);
$newwidth=$width*$ratio;
$newheight=$height*$ratio;
// $img_dst=imagecreatetruecolor($newwidth,$newheight);
$img_dst=imagecreate($newwidth,$newheight);
// imagecopyresampled($img_dst, $img_src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
imagecopyresized($img_dst, $img_src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
if($destinationfile==false)
{
//header("Content-type: image/jpeg");
$imagetype($img_dst);
}
else
$imagetype($img_dst,$destinationfile);
imagedestroy($img_dst);
return true;
}
else
{
return false;
}
}
Det er den funktion, jeg har brugt
Der findes sikkert en nyere, men jeg blev gjort opmærksom på, af Martin Slot, at den angivne URL returnerede 404, så derfor poster jeg nu på hans opfordring denne funktion, som sagt, lavet af XyborX
Tak for det, Martin
Jeg prøver at lave en tabel i min mysql data base med denne her: CREATE TABLE `billeder` (
`id` INT NOT NULL AUTO_INCREMENT,
`billed` TEXT NOT NULL ,
`tid` VARCHAR NOT NULL ,
UNIQUE (
`id`
)
)
Men jeg får bare:
MySQL said:
You have an error in your SQL syntax near 'NOT NULL, UNIQUE (`id`))' at line 1
tilbage i nakken!? hvad er der galt?
jeg får følgende fejl:
Parse error: parse error, expecting `','' or `';'' in /customers/bjerglundpedersen.dk/bjerglundpedersen.dk/httpd.www/emil/galleri/billeder.php on line 25
og linje 25 er:
<a href="" . $destinationLarge . $billede . "">
hvad er der galt???
Jeg har et problem. Den kan ikke finde ud af at resize når det er et .gif billede.
Der dukker ikke noget op i mappen. Det fungerer fint når det er .jpg eller .jpeg!
Hjælp please!
PS: Du lægger ud med at sige at du ikke bare vil give en masse kode som vi bare kan copy/paste, men det er lige netop det du gør.
Desuden er artiklen ekstremt dårligt forklaret på området hvor man skal kæde din kode og XyborXs kode sammen. Det ødelægger faktisk det hele. Jeg måtte rette en helvedes tid i den før den bare gad at tage .jpg billeder!
nøøj, hvor folk kan brokke sig, er jeg virkelig den eneste php-noob som fik det til at virker i først forsøg, (uden xyborxs kode) :-)
Rigtigt god artikel, der manglede bare et link til download GD-lib 2.
Så fik jeg det til at virke, det tog lang tid, fordi der er nogle fejl, men jeg syndes at det er en dårlig kvalitet de små billeder er.
kan ses her www.skovsbyggeforretning.dk/index.php?link=billeder
Så fik jeg det til at virke, det tog lang tid, fordi der er nogle fejl, men jeg syndes at det er en dårlig kvalitet de små billeder er.
kan ses her www.skovsbyggeforretning.dk/index.php?link=billeder
//Her ligges oplysningerne ind databasen – huske at connecte til den!
$query = "INSERT INTO billeder (billede, tid) VALUES ('$billede', '$tid')";
mysql_query($query);
}
Hvor kommer variablen $billede ind i koden ?
kan ikke finde den variable i billeder-upload-verify, ud over i billeder.php
Jeg kan heller ikke se hvor variablen $billede bliver sat? Lige pludselig bliver den bare smidt ind i MySQL'en, uden at den er blevet defineret?
Grunden til at der står unexpected } er fordi personen der lavede artiklen har sjusket lidt
Der skal være ; efter forskellige steder. Kan heller ikke få mit til at virke helt *-)
Grunden til at der står unexpected } er fordi personen der lavede artiklen har sjusket lidt
Der skal være ; efter forskellige steder. Kan heller ikke få mit til at virke helt *-)
Hejsa jeg synes at folk skulle lade være med at brokke sig sådan....NÅ !!!!
Jeg har et enkelt spørgsmål.
Når serveren forsøger at køre billeder-upload-veryfy.php så kommer der en Fatal error på linie 26 som siger :Call to undefined function: imageresize() hvordan kan det nu være ?? og hvad skal jeg gøre for at afhjælpe dette.
vh Cruiser79
fandt lige ud af hvad imageresize er :-) men hvordan bruger jeg den skal der laves en fil ekstra eller skal koden lægges ind i billeder-upload-verify.php ??
vh Cruiser79
fandt lige ud af hvad imageresize er :-) men hvordan bruger jeg den skal der laves en fil ekstra eller skal koden lægges ind i billeder-upload-verify.php ??
vh Cruiser79
fandt lige ud af hvad imageresize er :-) men hvordan bruger jeg den skal der laves en fil ekstra eller skal koden lægges ind i billeder-upload-verify.php ??
vh Cruiser79
I har ret i der måske er lidt fejl her og dér, men hvis i nu stillede konkrete spørgsmål, og SELV skrev koden i stedet for copy paste, så havde i ikke fået de syntax fejl!
5 Herfra.. har hjulpet mig meget!
CREATE TABLE `billeder` (
`id` INT( 3 ) NOT NULL AUTO_INCREMENT ,
`billede` TEXT NOT NULL ,
`tid` VARCHAR( 10 ) NOT NULL ,
UNIQUE (
`id`
)
);
virker for mig
$fra = $_FILES['fil']['tmp_name'];
Øhm, hvor kommer $_FILES['fil']['tmp_name'] fra?????
Fik det til at virke..
Er allerede igang med at udbygge det!
Hvorfor er de små billeder i så dårlig en kvalitet? Det er dog ringe...
Hej og tak.
Ny kan jeg endeligt oploade filer til min ftp: der var nu en del fejl men det gør det jo også lidt spændende.
Hej....
JEg har prøvet at lagt scripte på min egen server, men de lave ikke det lille billede..
Og script virker på mit surftown hotel..
Skal jeg installer noget eller er det bare en ting jeg skal til i apache eller php?
Hej....
JEg har prøvet at lagt scripte på min egen server, men de lave ikke det lille billede..
Og script virker på mit surftown hotel..
Skal jeg installer noget eller er det bare en ting jeg skal til i apache eller php?
Jeg får disse fejl :/
Warning: move_uploaded_file(../upload/billeder/large/1139230101_569245jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in c:\\wamp\\www\\billeder\\billeder-upload-verify.php on line 21
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'c:/wamp/tmp\\phpCB7.tmp' to '../upload/billeder/large/1139230101_569245jpg' in c:\\wamp\\www\\billeder\\billeder-upload-verify.php on line 21
Warning: getimagesize(../upload/billeder/large/1139230101_569245jpg) [function.getimagesize]: failed to open stream: No such file or directory in c:\\wamp\\www\\billeder\\config.php on line 25
Warning: Cannot modify header information - headers already sent by (output started at c:\\wamp\\www\\billeder\\billeder-upload-verify.php:21) in c:\\wamp\\www\\billeder\\billeder-upload-verify.php on line 34
glem lige mit indlæg lidt, glemte at lave mapperne :o
Kan ikke få det til at virke
Jeg har fået det til at virke og synes dette er en god artiktel
og jeg vil forslå at man bruger
$img_dst=imagecreatetruecolor($newwidth,$newheight);
// $img_dst=imagecreate($newwidth,$newheight);
i stedet for
// $img_dst=imagecreatetruecolor($newwidth,$newheight);
$img_dst=imagecreate($newwidth,$newheight);
i imageresize functionen da tumbsne bliver MEGET pænere ved det
god artikel.. dog med rimelige væsenlige mangler/fejl
hvorfor får jeg fejlen Fatal error: Function name must be a string in /customers/wizzo.dk/wizzo.dk/httpd.www/upload/billeder-upload-verify.php on line 29 ?
Jeg får også følgende fejl:
Fatal error: Call to undefined function: imageresize() in /hsphere/local/home/viggosmo/soederberg-webdesign.dk/testIdesign/billeder-upload-verify.php on line 26
Ved ikke hvorfor?
Jeg får også følgende fejl:
Fatal error: Call to undefined function: imageresize() in /hsphere/local/home/viggosmo/soederberg-webdesign.dk/testIdesign/billeder-upload-verify.php on line 26
Ved ikke hvorfor?
Du skal være
logget ind for at skrive en kommentar.