01. marts 2003 - 16:43Der er
27 kommentarer og 1 løsning
fread og fopen ???
Hejsa. Har lige lavet/fundet et script der uploader en .jpeg fil til min mysql db. I scriptet forkommer denne linie lige inden at filen bliver smidt ind i databasen:
Hvad er det lige det er at fread() og fopen() gør ? og hvorfor bruges de lige i denne sammenhæng ?
Jeg har prøvet at kigge på php.net men det fik jeg ikke så meget ud af. Min nysgerrihed omkring fread og fopen kom da jeg ville trække billedet ud af databasen og lave et thumbnail af billedet, hvor jeg fik denne fejl:
Warning: imagecreatefromjpeg(ÿØÿà) [function.imagecreatefromjpeg]: failed to create stream: No such file or directory in c:\bla..bla..bla
Linien hvor det går galt er: $src_img=ImageCreateFromJPEG($file);
Iføgle den Warning indeholder $file "ÿØÿà" og ikke et filnavn. Det er her jeg kom til at tænke på fread() og fopen. Nogen der kan give en forklaring ?
Feltet indeholder dit billede - ikke navnet på det. fopen/fread læser indholdet af en fil. Du skal groft sagt blot smide indholdet af feltet direkte i hovedet på brugeren. Har du ikke et eksempel at skrive af efter?
Synes godt om
Slettet bruger
01. marts 2003 - 16:58#2
fopen(); åbner filen til skrivning og læsning (returnerer en filepointer) fread($fp, $length); //læser $length bytes fra $fp (filepointeren til en given fil)
I det konkrete eksempel kan du bruge file_get_contents($filename) i stedet for fread(fopen($filename,"rb"),filesize($filename));
Ja, du kan i hvert fald ikke bruge imagecreatefromjpeg, der kræver et filnavn. Hvorfor laver du ikke dit thumbnail ved upload og putter det i databasen også?
Jo det kunne jeg jo egentlig godt, hvilket oxo ville gøre siden lidt hurtigere at den ikke skal lave fx. 16 nye billeder. Men så da bare for interessens skyld, kan man ikke gå baglæns og lave en fil ud fra indeholde i databasen ?
hmm... ligesom jeg troede at den var hjemme opstår der selfølgelig nu problemer :( Problemet ligger i at jeg ikke kan få smidt det nye "thumbnail" billed lagt ned i en fil saa jeg kan smide den i min database. Jeg har prøvet med det her:
$dst_img=ImageCreate($new_w, $new_h); $src_img=ImageCreateFromJPEG($filename); ImageCopyResized($dst_img,$src_img,0,0,0,0,$new_width,$new_h,ImageSX($src_img),ImageSY($src_img)); $tmpfname = tempnam("/tmp", "tempfil"); // lave en temp file Imagejpeg($dst_img, $tmpfname); //Skulle kopiere det nye bllede over i temp filen
Den kommer ikke med nogen fejlmeddelse, men der kommer bare ikke noget billede frem :( Grunden til at jeg ved at det er data'en den er galt med er, at jeg med phpmyadmin har prøvet at overskreve feltet "thumbnail" med en billede fil. Og så kan den lige pludselig godt udskrive billedet.
Det gik den helt amok over, men hvad jeg kunne for stå på php.net, så har ImageJPEG(); to muligheder: at udskrive billedet til skærmen direkte eller til en fil. Men det er vel ikke det vi har brug for her. Vi vil jo have den ned i en database.
$new_height = "100"; $scale = $new_height/$height; $new_width = $width * $scale; $dst_img=ImageCreate($new_width, $new_height); $src_img=ImageCreateFromJPEG($filename); ImageCopyResized($dst_img,$src_img,0,0,0,0,$new_width,$new_height,ImageSX($src_img),ImageSY($src_img)); //$dst_img = addslashes($dst_img); ---- er ikke sikker på at eden skal med, tror det ikke $tmpfname = tempnam("/tmp", "tempfil"); // lave en temp file Imagejpeg($dst_img, $tmpfname); //Skulle kopiere det nye bllede over i temp filen $file2 = addslashes(fread(fopen($file2,"rb"),filesize($file2))); $sql = "INSERT INTO pix SET file='$file', thumbnail='$file2', type='$type', text='test billede', height='$height', width='$width', height2='$new_height', width2='$new_width'"; sql_connect(); sql_query($sql); sql_close(); header("Location:read.php");
Her får jeg så bare denne fejl: parse error, unexpected T_STRING in save.php on line 20 linie 20 er: Imagejpeg($dst_img, $tmpfname);
"/tmp" i nedenstående linie betyder bilioteket 'tmp' i det jeg står i ik ? $tmpfname = tempnam("/tmp", "tempfil");
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.