Image Upload Class (Inclusief Resize - PHP5)

Gepost door Robin v. G. op 14-01-2009 10:53.

Eerste script is de klasse zelf, de tweede, derde en vierde zijn simpele voorbeelden. HTML mag je er zelf bij verzinnen.

Dit script is ongetwijfeld nog voor verbetering vatbaar, maar ik heb hier denk ik toch een redelijke klasse neergezet. Ik heb me vanmorgen kapotgezocht naar PHP5-klasses die dit konden, maar ik vond er nergens een. Ik ben dus zelf maar aan de slag gegaan, in de hoop een leuk resultaat uit te poepen. Dit is het geworden, ik hoop dat dit jullie het zoekwerk bespaart dat het mij heeft gekost!

[14-01-2009]
; toegevoegd op regel 66.

-- Let op: dit script bevat onhandige foutafhandeling. Beter is het om de fouten in arrays te zetten. Dus iets als: $aErrors[] = 'Extensieblabla';

Heb momenteel geen tijd dat aan te passen.

Bestanden van dit script

index.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
<?php

class ImageUpload
{

    /*
    Dit script is geschreven door Robin v. G. en mag gratis gebruikt worden, indien deze melding blijft staan. Dit script is vanaf scrap opgebouwd, op het resizegedeelte na.
    Hiervoor verwijs ik graag naar Eris van PHP Hulp, die een perfect resizescript in elkaar heeft gezet. Alle credits hiervoor naar hem/haar!
    Voor het originele script kijken we hier: http://www.phphulp.nl/php/scripts/9/464.  
    */

    // De eerste variabelen. Uiteraard zijn al deze variabelen naar eigen smaak aan te passen. 

    // De maximale grootte van het bestand in bytes. 
    public  $maxSize         = 100000;
    public  $allowedExt     = array('.JPG', '.JPEG', '.GIF', '.PNG', '.jpg', '.jpeg', '.gif', '.png');
    public  $allowedTypes    = array('image/jpg', 'image/jpeg', 'image/gif', 'image/png', 'image/pjpeg', 'image/x-gif', 'x-image/gif');
    
    /* 
    Onderstaande twee variabelen zijn alléén van toepassing als je exif-functies kunt uitvoeren. Deze staat standaard op FALSE. 
    Let op! Deze manier van het controleren is véél veiliger dan het normaal controleren.
    */
    public  $allowedExif    = array('IMAGETYPE_GIF', 'IMAGETYPE_JPEG', 'IMAGETYPE_PNG');
    public  $checkRealMime    = FALSE;

    /*
    Spreekt voor zich; de map waarin de bestanden geplaatst moeten worden. 
    Let op! Deze map moet je wel eerst, zelf aanmaken.
    */
    public  $uploadFolder    = 'uploads/';
    
    /*
    Deze variabele is van groot belang als je, bijvoorbeeld, avatars wilt uploaden. Geef in je uploadpagina deze variabele het resultaat van mysql_insert_id().
    Laat je deze variabele onveranderd, wordt een timestamp voor de bestandsnaam gezet, om de kans dubbele bestanden te krijgen te minimaliseren.
    */
    public  $insertId;
    
    // De belangrijkste variabele uit het hele uploadscript; het bestand zelf.
    public  $file;
    
    // Als je je gebruikers de keus wilt geven zelf een naam op te geven, moet je $_POST['waarde'] toekennen aan deze variabele. Wel zelf even valideren!
    public  $newImageName    = '';
    
    /*
    De variabelen die van belang zijn voor het herschalen van je images. 
    Zet je resizeImage op FALSE en verander je ook de extensiearray, kun je ook normale bestanden zonder problemen uploaden.
    */
    public  $resizeImage    = TRUE;
    public  $widthImage        = 150;
    public  $heightImage    = 150;
    public  $resizeFolder    = 'uploads/thumbnails/';        
    
    // Dit zijn de variabelen die verantwoordelijk zijn voor de foutmeldingen.
    private  $errorFound    = FALSE;
    private  $errorMessage;


    // Deze functie roep je aan in je uploadbestand, en zet het hele proces in werking.
    public function moveFile(){
    
        // De functionaliteit zoals hierboven omschreven; er is geen insertid meegegeven vanuit de pagina, dus wordt er een timestamp uitgepoept.
        if($this->insertId == ''){
        
            $this->insertId = time();
            
        }
        
        // Als de variabele newImageName gevuld is, wordt verwezen naar de functie 'createNewName()', die zorgt dat het bestand met de nieuwe naam wordt geüpload.
        if(!empty($this->newImageName)){
    
            $this->createNewName();
            
        }
        
        // Omdat Linux niet houdt van spaties in bestandsnamen, worden deze standaard gefilterd. Dus óók de spaties die de gebruiker ingeeft.
        $this->file['name'] = str_replace(' ', '_', $this->file['name']);
        
        // Als het uploaden naar TEMP gelukt is, begint het echte proces.
        if(is_uploaded_file($this->file['tmp_name'])){
        
            // Allereerst roepen we de bestandsgroottecontrole aan.
            $this->checkFileSize();
            // Hierna kijken we of de extensie wel correct is.
            $this->checkExtension();
            
            // Als men wilt dat er hergeschaald wordt, gaan we hier daartoe opdracht geven.
            if($this->resizeImage == TRUE && $this->errorFound == FALSE){
            
                $this->resizeImage();
                
            }
            
            // Als bovenstaande functies een error hebben opgeleverd, houden we hier op met uploaden en geven we die message terug.
            if($this->errorFound == TRUE){
            
                $this->returnMessage();
                
            }else{

                /*
                Ha, alles is goed gegaan, we hebben dus een bestand dat voldoet aan de eisen (en zelfs al hergeschaald is, indien aangegeven). Dan gaan we echt uploaden!
                Zoals je ziet gooi ik die variabele 'insertId' ervoor, gevolgd door een underscore.
                */
                if(move_uploaded_file($this->file['tmp_name'], $this->uploadFolder.$this->insertId.'_'.$this->file['name']) == FALSE){
                
                    $this->errorFound     = TRUE;
                    $this->errorMessage    .= 'Het bestand kon niet worden geüpload.';
                    $this->returnMessage();
                
                }else{
                
                    // Blijkbaar is er geen fout opgetreden; we vertellen de gebruiker dat het gelukt is.
                    $this->returnSucceed();
            
                }
            }    
        }else{
        
            // Houston, we've got a problem. We hebben niets kunnen doen. Geen functie is uitgevoerd, en zelfs het uploaden naar TEMP is mislukt. Helaas!
            $this->errorFound     = TRUE;
            $this->errorMessage    .= 'Er is iets misgegaan tijdens het uploaden.';
            $this->returnMessage();
            
        }        
    }    
                
    private function checkExtension(){
        
        // Ik haal de extensie op.
        $extension     = strrchr($this->file['name'], '.');
        // Ik haal het type op.
        $type        = $this->file['type'];
    
        // Als de functie 'exif_imagetype' beschikbaar is op de server én de gebruiker wenst deze uit te voeren, komt de controle op het bestandstype.
        if(function_exists('exif_imagetype') && $this->checkRealMime == TRUE){
        
            if (in_array(exif_imagetype($this->file['tmp_name']), $this->allowedExif)) {
                
                return TRUE;
            
            }else{
            
                $this->errorFound     = TRUE;
                $this->errorMessage .= 'De extensie voldoet niet aan de eisen. De toegestande extensies zijn '.implode($this->allowedExt, ', ').'.<br />';
                
            }
            
        // De functie wordt niet ondersteund of is niet op TRUE gezet, dus gaan we maar op de minder veilige manier te werk om toch te kijken of het een goed bestand is. 
        }else{
    
            if(in_array($extension, $this->allowedExt) && in_array($type, $this->allowedTypes)){
            
                return TRUE;
                
            }else{
            
                $this->errorFound     = TRUE;
                $this->errorMessage    .= 'De extensie voldoet niet aan de eisen. De toegestane extensies zijn '.implode($this->allowedExt, ', ').'.<br />';
                return FALSE;
                    
            }
        }
    }
    
    // Het is ook wel handig om te weten of het bestand niet groter is dan toegestaan, dat controleren we hier.
    private function checkFileSize(){
    
        $size     = $this->file['size'];
        $error    = $this->file['error'];
        
        if($size <= $this->maxSize && ($error != 1 || $error != 2)){
        
            return TRUE;

        }else{
        
            $this->errorFound    = TRUE;
            $this->errorMessage    .= 'Het bestand is groter dan de toegestane '.ceil($this->maxSize / 1024).' kb.<br />';
            return FALSE;
            
        }
    }
    
    /*
    Hiervoor gaat alle dank uit naar Eris van PHP Hulp.
    Voor het originele script kijken we hier: http://www.phphulp.nl/php/scripts/9/464. 
    Ik heb het script her en der wat aangepast om het te laten voldoen aan mijn wensen, maar ik heb dankbaar gebruik gemaakt van de corefunctionaliteiten zoals toegevoegd door Eris.
    */
    private function resizeImage(){
    
        // Alle benodigde bestandsinformatie ophalen.
        $dim = getimagesize($this->file['tmp_name']);
    
        // Het bestand ís al kleiner dan hij moet worden, dus uploaden we hem gelijk maar.
        if($dim[0] < $this->widthImage && $dim[1] < $this->heightImage){
        
            if(move_uploaded_file($this->file['tmp_name'], $this->resizeFolder.$this->insertId.'_tn_'.$this->file['name']) == FALSE){
            
                $this->errorFound    = TRUE;
                $this->errorMessage .= 'Het bestand kon niet worden geüpload!';
                
            }
        
        // Het bestand moet nog verkleind worden, dat proces zetten we hier in werking.
        }else{
        
            if($dim[0] > $dim[1]){
            
                $prop         = $this->widthImage / $dim[0];
                $dims[0]     = $this->widthImage;
                $dims[1]     = round($dim[1] * $prop); 
                
            }else{
            
                $prop         = $this->heightImage / $dim[1];
                $dims[1]     = $this->heightImage;
                $dims[0]     = round($dim[0] * $prop); 
                
            }
            
            if($dim[2] == 2){
            
                if(!$mimage = @imagecreatefromjpeg($this->file['tmp_name'])){
                
                    $this->errorFound    = TRUE;
                    $this->errorMessage    .= 'Het bestand kon niet worden geresized.';
                    
                }
            }else if($dim[2] == 1){
            
                if(!$mimage = @imagecreatefromgif($this->file['tmp_name'])){
                
                    $this->errorFound    = TRUE;
                    $this->errorMessage    = 'Het bestand kon niet worden geresized.';
                    
                }
                
            }else if($dim[2] == 3){
            
                if(!$mimage = @imagecreatefrompng($this->file['tmp_name'])){
                
                    $this->errorFound    = TRUE;
                    $this->errorMessage    = 'Het bestand kon niet worden geresized.';
                    
                }
                
            }else{
            
                $this->errorFound    = TRUE;
                $this->errorMessage    = 'De extensie voldoet niet aan de eisen. De toegestane extensies zijn '.implode($this->allowedExt, ', ').'.<br />';
            
            }
            
            $im = imagecreatetruecolor($dims[0], $dims[1]);
            imagecopyresampled($im, $mimage, 0, 0, 0, 0, $dims[0], $dims[1], $dim[0], $dim[1]);
            
            if($dim[2] == 2){
            
                if(!@imagejpeg($im, $this->resizeFolder.$this->insertId.'_tn_'.$this->file['name'])){
                
                    $this->errorFound    = TRUE;
                    $this->errorMessage    = 'Het bestand kon niet worden geüpload.';
                    
                }
                
            }else if($dim[2] == 1){
            
                if(!@imagegif($im, $this->resizeFolder.$this->insertId.'_tn_'.$this->file['name'])){
                
                    $this->errorFound    = TRUE;
                    $this->errorMessage    = 'Het bestand kon niet worden geüpload.';
                    
                }
                
            }else if($dim[2] == 3){
            
                if(!@imagepng($im, $this->resizeFolder.$this->insertId.'_tn_'.$this->file['name'])){
                
                    $this->errorFound    = TRUE;
                    $this->errorMessage    = 'Het bestand kon niet worden geüpload';
                    
                }
            }
        }
    }
    
    // De functie die verantwoordelijk is voor het toewijzen van de nieuwe naam. Je kunt hier nog validatie in stoppen, anders moet je dat in je uploadpagina doen.
    private function createNewName(){
    
        $extension     = strrchr($this->file['name'], '.');
        $this->file['name'] = $this->newImageName.$extension;
                
    }
    
    // Er is ergens iets fout gegaan, dus echo ik een error.
    private function returnMessage(){
    
        echo $this->errorMessage;
    
    }
    
    // Het is allemaal goed afgelopen, dat vertellen we de gebruiker graag.
    private function returnSucceed(){
    
        echo 'Het uploaden van het bestand is gelukt!';
    
    }
}

?>

<?php
        $upload = new ImageUpload();
// Ik geef het bestand 'image' door aan de klasse.
        $upload->file = $_FILES['image'];
// We zijn heel karig en vinden 0.1 kb al genoeg.
        $upload->maxSize = 100;
// We willen een andere folder dan default.
        $upload->uploadFolder = 'images/';
// Hetzelfde geldt voor de thumbnails.
        $upload->resizeFolder = 'images/thumbnails/';
// De gebruiker mag zelf een naam verzinnen.
        $upload->newImageName = $_POST['naam'];
// De breedte houden we ook lekker klein.
        $upload->widthImage = 10;
// Uploaden maar!
        $upload->moveFile();
?>

<?php

// We houden alles lekker standaard, dit is de korst mogelijke variant.
    $upload = new ImageUpload();
        $upload->file = $_FILES['image'];
        $upload->moveFile();

?>

<?php

// We willen gewoon alleen DOC-bestanden uploaden. We slopen het resizegedeelte eruit en gaan alleen voor de docs!
    $upload = new ImageUpload();
        $upload->resizeImage = FALSE;
        $upload->allowedExt    = array('.DOC');
        $upload->allowedTypes    = array('text/plain');
        $upload->file = $_FILES['file'];
        $upload->moveFile();

?>

Commentaar

14-03-2008 15:25

Eerst kritisch commentaar:
>>>>
Let op! Deze manier van het controleren is véél veiliger dan het normaal controleren.
<<<<
Is niet zo, getimagesize controleert namelijk zelf ook al met wat voor plaatjes deze te doen heeft. De mime-types die hierop gebaseerd zijn, zijn minimaal even veilig als de exif_imagetype output.

>>>>
public $allowedExif = array('IMAGETYPE_GIF', 'IMAGETYPE_JPEG', 'IMAGETYPE_PNG');
<<<<
Snap niet waarom dit met strings moet? Kan dat niet gewoon zonder de quotes? Is namelijk geheugentechnisch een stuk beter.
>>>>
if (in_array(exif_imagetype($this->file['tmp_name']), $this->allowedExif)) {
<<<<
Daarnaast klopt dit niet met het bovenstaande. De functie exif_imagetype returnt een integer. Geen string, en je gaat controleren met een array met strings... :confusing:

>>>>
public $allowedExt = array('.JPG', '.JPEG', '.GIF', '.PNG', '.jpg', '.jpeg', '.gif', '.png');
<<<<
Waarom moet je hier de punt overal toevoegen? Kun je bet in het script zorgen dat de punt gestript wordt. Bijv. met substr($extension, 1). Daarnaast zijn extensies per definitie niet case-sensitive. Dus kun je beter gewoon even alle extensies lower- of uppercase maken en dan in het commentaar er bij zetten dat deze allemaal lower- of uppercase dienen te zijn.
Want wat als ik nu het plaatje dag.jPg upload? Is volledig legaal, maar volgens jouw script niet... :)

>>>>
public $resizeImage = TRUE;
<<<<
>>>>
$upload = new ImageUpload();
$upload->resizeImage = FALSE;
$upload->allowedExt = array('.DOC');
$upload->allowedTypes = array('text/plain');
$upload->file = $_FILES['file'];
$upload->moveFile();
<<<<
Je gaat dus van een ImageUpload-class een uploadClass maken. Aardig... Maar vind het niet echt logisch... Daarnaast is een .doc standaard geen text/plain-bestand.
Verder moet je zelf het resizen van images uitschakelen => dat kan het script toch ook zelf doen? Eerst detecteren of iets een plaatje is en alleen wanneer iets een plaatje is deze ook werkelijk resizen.
Wanneer je bij het aanroepen van getimagesize geen array terug krijgt, kun je er van uitgaan dat het geen plaatje is. In dat geval hoeft deze ook niet geresized te worden. Wanneer het wel een plaatje is kun je controleren aan de hand van de array die je terug hebt gekregen of het een plaatje van het goede type is.

Daarnaast zou je kunnen overwegen om bij de functie moveFile alleen de index mee te geven onder welke naam het bestand wat geüpload moet worden is te vinden in de superglobal $_FILES.

De hoeveelheid commentaar is een beetje heel erg verwarrend. Teveel gewoon :)

Voor de rest een leuke class. Goed voor een `goed` :D

Ga zo door, succes met je volgende scripts :)

>>>
Eerste script is de klasse zelf, de tweede, derde en vierde zijn simpele voorbeelden. HTML mag je er zelf bij verzinnen.
<<<
Helemaal mee eens. HTML is niet voor in de SL, SL is enkel voor functionaliteit niet voor kant-en-klaar scripts (omdat dat de kwaliteit van scripts over het algemeen niet bevordert). Maar daar denken anderen anders over :D

1
2
3
Post hier de source-code van je script. Alle informatie tussen <? ... ?> en <?php ... ?> zal automatisch worden getoond in color-coding. 

Let op! Het is niet de bedoeling om hier een link naar je website te plaatsen. Post hier gewoon de code, veel simpeler, sneller en meer kans dat het blijft staan.
14-03-2008 17:35

Nog een kleine aanvulling op mijn vorige post:
>>>>
if($this->resizeImage == TRUE && $this->errorFound == FALSE){
<<<<
Is correcter en korter om te schrijven:
if($this->resizeImage && !$this->errorFound)

>>>
if($this->insertId == ''){

$this->insertId = time()

}
<<<<
if(!$this->insertId) >>
Daarnaast is het niet handig om de timestamp te gebruiken. Als je een beetje snelle server hebt, ben je al snel aan zo'n 50 requests per seconde die de server kan afhandelen. Denk niet dat jij dat wilt meemaken.
Misschien kun je meer met een functie als tempnam of is het handiger om zelf een implementatie te schrijven die kan dienen om unieke filenames te maken.

>>>>
private function returnMessage(){

echo $this->errorMessage;

}

// Het is allemaal goed afgelopen, dat vertellen we de gebruiker graag.
private function returnSucceed(){

echo 'Het uploaden van het bestand is gelukt!';

}
<<<<
In PHP heb ik in beide gevallen weinig aan deze returns. Meestal gebruik je de uitkomst van een bewerking in een IF-ELSE-structuur. Dus in dit geval:
<?php
if($imageUploadClass->moveFile()){
echo 'Het is helemaal gelukt hoor!';
}
else {
echo 'Het is dus nu effe niet gelukt!';
}
?>
Het voordeel hiervan is dat je zelf je HTML kunt samenstellen e.d. En daarnaast kun je evt. andere routines uitvoeren wanneer het uploaden gefaald heeft. Kortom: een return in de form van true/false is dan handiger. Nu is het altijd gelukt, ondanks dat het helemaal niet gelukt hoeft te zijn (string met lengte van 1 of meer levert altijd true op in een if-else).

>>>>
if($dim[0] > $dim[1]){

$prop = $this->widthImage / $dim[0];
$dims[0] = $this->widthImage;
$dims[1] = round($dim[1] * $prop);

}else{

$prop = $this->heightImage / $dim[1];
$dims[1] = $this->heightImage;
$dims[0] = round($dim[0] * $prop);

}
<<<<
Van deze resize klopt niet zo heel veel. Denk dat je ongeveer dit had bedoelt.
<?php
if(($prop = ($dim[0] / $maxwidth)) > ($dim[1] / $maxheight)) $prop = ($dim[1] / $maxheight);
$newWidth = round($dim[0] * $prop);
$newHeight = round($dim[1] * $prop);
?>

>>>>
$this->errorMessage = 'De extensie voldoet niet aan de eisen. De toegestane extensies zijn '.implode($this->allowedExt, ', ').'.<br />';
<<<<
De extensie voldoet wel, maar het bestandstype niet. Daarom is het controleren op extensie bij images ook zinloos.

Nog een vraag: Hoe weet ik na het uploaden e.d. welke bestandsnamen er zijn aangemaakt? Oftewel: waar is de output gebleven (hoe heten de bestanden)? Of moet ik dat raden?

1
2
3
Post hier de source-code van je script. Alle informatie tussen <? ... ?> en <?php ... ?> zal automatisch worden getoond in color-coding. 

Let op! Het is niet de bedoeling om hier een link naar je website te plaatsen. Post hier gewoon de code, veel simpeler, sneller en meer kans dat het blijft staan.
15-03-2008 14:34

Voort 'zeurend' over het melden van statussen van je script naar de user toe, daar kun je het makkelijkste Exceptions voor gebruiken.
Zo kun je uiteindelijk, zoals Jan Willem van der Veer al aangaf, gewoon aan het einde van de rit een true of false teruggeven én kun je een foutmelding geven naar de gebruiker toe..

Nog een puntje van kritiek, je controleert wel netjes of je de functie 'exif_imagetype' bestaat, maar ik zie nergens een check of je het plaatje wel kunt vergroten/verkleinen..

Ook is onderstaan stukje code ook niet echt wat je noemt netjes, heb hem een beetje verandert,.. uiteraard is dit niet zoals je het MOET doen, maar kan doen.
Wat trouwens -- volgens mij -- ook zo is, als je alles goed gevalideert hebt, dan kunnen daar geen fouten optreden, maar dat terzijde..

ps. die zoektocht heb ik ook al tijden geleden opgegeven, heb uiteindelijk ook zelf iets gebrouwd

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php
if($dim[2] == 2){

    if(!$mimage = @imagecreatefromjpeg($this->file['tmp_name'])){
   
        $this->errorFound    = TRUE;
        $this->errorMessage    .= 'Het bestand kon niet worden geresized.';
       
    }
}else if($dim[2] == 1){

    if(!$mimage = @imagecreatefromgif($this->file['tmp_name'])){
   
        $this->errorFound    = TRUE;
        $this->errorMessage    = 'Het bestand kon niet worden geresized.';
       
    }
   
}else if($dim[2] == 3){

    if(!$mimage = @imagecreatefrompng($this->file['tmp_name'])){
   
        $this->errorFound    = TRUE;
        $this->errorMessage    = 'Het bestand kon niet worden geresized.';
       
    } 
}

// veranderde, kortere vorm

// als je de extensie hebt zonder punt
// zo zie je maar weer, zonder punt zijn ze een stuk makkelijker te gebruiken, in plaats van met die vervelende punt, maar goed, smaken verschillen
$sFunctionName = 'imagecreatefrom' . ($sExtension == 'jpg' ? 'jpeg' : $sExtension);

// de @ is ook lelijk
$this -> errorFound = (!$mimage = $sFunctionName($this -> file['tmp_name']));

// mocht je de foutmelding willen behouden, dan kun je natuurlijk gewoon $this -> errorFound gebruiken
if ($this -> errorFound)
{
    // error bericht
}
else
{
    // woei, geen fouten
}
?>
14-05-2008 22:23

Is de resize functie ook slim? Dus dat als je een portretfoto upload, de width zich aanpast aan de hoogte.

Voor de rest een goed script. Dank je wel.

1
2
3
Post hier de source-code van je script. Alle informatie tussen <? ... ?> en <?php ... ?> zal automatisch worden getoond in color-coding. 

Let op! Het is niet de bedoeling om hier een link naar je website te plaatsen. Post hier gewoon de code, veel simpeler, sneller en meer kans dat het blijft staan.
14-05-2008 22:45

Als je bedoelt dat de foto nooit uitgerekt wordt: ja, dat zit erin. Alleen merk ik wel dat er nog wat problemen zijn met die functie, zie ook het commentaar van de anderen. Op zich werkt het prima, maar ik moet het nog een beetje opvijzelen.

Ook de andere heren nog bedankt voor de tips, ben eigenlijk spontaan vergeten hier nog naar te kijken.

1
2
3
Post hier de source-code van je script. Alle informatie tussen <? ... ?> en <?php ... ?> zal automatisch worden getoond in color-coding. 

Let op! Het is niet de bedoeling om hier een link naar je website te plaatsen. Post hier gewoon de code, veel simpeler, sneller en meer kans dat het blijft staan.
15-05-2008 01:07

Nee, dat bedoel ik niet, hoe leg ik dat ff simpel uit haha. Ik heb bijv. een max height van 130px en een maxwidth van 275px. Nu gaat het gebeuren dat ik een portret foto ga uploaden. De breedte wordt dan 275 en de hoogte bijv 500px. Zit de beveiliging erin dat ie niet groter wordt dan de maxheight??

1
2
3
Post hier de source-code van je script. Alle informatie tussen <? ... ?> en <?php ... ?> zal automatisch worden getoond in color-coding. 

Let op! Het is niet de bedoeling om hier een link naar je website te plaatsen. Post hier gewoon de code, veel simpeler, sneller en meer kans dat het blijft staan.
29-05-2008 16:04

Ik zie dat dit script al langer in de library staat, en nu dus opeens weer bovenaan de lijst, mag ik vragen wat de veranderingen zijn geweest? Altijd handig als je een changelog bijhoudt.

1
2
3
<?php
    echo $this->history;
?>
29-05-2008 16:07

Ah, vergeten ja.

De array met toegestane bestandstypen is uitgebreid met 'image/pjpeg', een type dat alleen IE meestuurt.

1
2
3
4
5
<?php

public  $allowedTypes    = array('image/jpg', 'image/jpeg', 'image/gif', 'image/png', 'image/pjpeg');

?>
30-05-2008 19:18

En zo is er ook nog image/x-gif en x-image/gif.

Ik heb zo geen idee meer hoe en waar die kwamen, maar als je op "image/x-gif" zoekt zul je vast wel iets vinden.

Image/pjpeg stuurt IE trouwens niet standaard mee. Alleen als de JPG is opgeslaan met Paint (Paint JPEG).

Voor de rest een net script.

1
<? $##$$# ?>
30-05-2008 21:11

Toegevoegd dus. :)

1
2
3
4
5
<?php

echo 'Bedankt!';

?>
13-01-2009 12:11

; vergeten op regel 66

1
2
3
4
5
6
7
8
9
10
11
<?


        // De functionaliteit zoals hierboven omschreven; er is geen insertid meegegeven vanuit de pagina, dus wordt er een timestamp uitgepoept.
        if($this->insertId == ''){
       
            $this->insertId = time(); //; vergeten
           
        } 

?>
Inloggen wachtwoord vergeten? Aanmelden