PHP Error bij uploaden bmp ext.
Ik heb last van een "vreemde" php error. Een uploadscript dat ik heb geeft een error als ik .bmp bestanden probeer te uploaden terwijl ik in het script heb aangegeven dat deze wel is toegestaan.
Dit is de error die ik krijg:
Fatal error: Call to undefined function imagecreatefrombmp() in /home/patjuhsp/public_html/upload/index.php on line 37
En de code:
Code (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
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
<?php
echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"post\" enctype=\"multipart/form-data\" name=\"form\" id=\"form\">";
echo "<center>Foto Uploaden: <input name=\"bestand\" type=\"file\" size=\"30\" id=\"bestand\"><br>";
echo "<input name=\"uploaden\" type=\"submit\" id=\"uploaden\" value=\"Upload\">";
// Mappen CHMOD 777 !
if(isset($_POST['uploaden'])){
$dir = ""; // map voor images
$thumb_dir = "thumbs/"; // map voor thumbs
$maxsize = 1000000; // maximum groote images
$max_y = 100; // maximum hoogte thumbs
$max_x = 80; // maximum breedte thumbs
$pathinfo = pathinfo($_FILES['bestand']['name']);
$ext = $pathinfo["extension"];
switch($ext){
case "jpg" : $thumb = imagecreatefromjpeg($_FILES['bestand']['tmp_name']);
break;
case "JPG" : $thumb = imagecreatefromJPEG($_FILES['bestand']['tmp_name']);
break;
case "jpeg" : $thumb = imagecreatefromjpeg($_FILES['bestand']['tmp_name']);
break;
case "gif" : $thumb = imagecreatefromgif($_FILES['bestand']['tmp_name']);
break;
case "bmp" : $thumb = imagecreatefrombmp($_FILES['bestand']['tmp_name']);
break;
case "png" : $thumb = imagecreatefrompng($_FILES['bestand']['tmp_name']);
break;
default : $wrongext = 1;
}
if(isset($wrongext)){
$error = "Verkeerde Extensie<br>";
}else{
if($_FILES['bestand']['size'] > $maxsize){
$error = "Bestand is te groot";
}else{
$succes = true;
}
}
if(!isset($succes) || isset($error)){
echo "<br><br>Er is een fout opgetreden: $error";
}else{
move_uploaded_file($_FILES['bestand']['tmp_name'], $dir.$_FILES['bestand']['name']) or die("Kan niet uploaden");
$x = imagesx($thumb);
$y = imagesy($thumb);
if(($max_x/$max_y) < ($x/$y)){
$eind = imagecreatetruecolor($x/($x/$max_x), $y/($x/$max_x)) or die("Fout: imagecreattreucolor() 1");
}else{
$eind = imagecreatetruecolor($x/($y/$max_y), $y/($y/$max_y)) or die("Fout: imagecreattreucolor() 2");
}
imagecopyresized($eind, $thumb, 0, 0, 0, 0, imagesx($eind), imagesy($eind), $x, $y) or die("Fout: imagecopyresized()");
imagegif($eind, $thumb_dir.$_FILES['bestand']['name']) or die("Fout: imagegif()");
imagedestroy($thumb);
imagedestroy($eind);
echo "<br><br>De foto is geüpload";
}
}
?>
echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"post\" enctype=\"multipart/form-data\" name=\"form\" id=\"form\">";
echo "<center>Foto Uploaden: <input name=\"bestand\" type=\"file\" size=\"30\" id=\"bestand\"><br>";
echo "<input name=\"uploaden\" type=\"submit\" id=\"uploaden\" value=\"Upload\">";
// Mappen CHMOD 777 !
if(isset($_POST['uploaden'])){
$dir = ""; // map voor images
$thumb_dir = "thumbs/"; // map voor thumbs
$maxsize = 1000000; // maximum groote images
$max_y = 100; // maximum hoogte thumbs
$max_x = 80; // maximum breedte thumbs
$pathinfo = pathinfo($_FILES['bestand']['name']);
$ext = $pathinfo["extension"];
switch($ext){
case "jpg" : $thumb = imagecreatefromjpeg($_FILES['bestand']['tmp_name']);
break;
case "JPG" : $thumb = imagecreatefromJPEG($_FILES['bestand']['tmp_name']);
break;
case "jpeg" : $thumb = imagecreatefromjpeg($_FILES['bestand']['tmp_name']);
break;
case "gif" : $thumb = imagecreatefromgif($_FILES['bestand']['tmp_name']);
break;
case "bmp" : $thumb = imagecreatefrombmp($_FILES['bestand']['tmp_name']);
break;
case "png" : $thumb = imagecreatefrompng($_FILES['bestand']['tmp_name']);
break;
default : $wrongext = 1;
}
if(isset($wrongext)){
$error = "Verkeerde Extensie<br>";
}else{
if($_FILES['bestand']['size'] > $maxsize){
$error = "Bestand is te groot";
}else{
$succes = true;
}
}
if(!isset($succes) || isset($error)){
echo "<br><br>Er is een fout opgetreden: $error";
}else{
move_uploaded_file($_FILES['bestand']['tmp_name'], $dir.$_FILES['bestand']['name']) or die("Kan niet uploaden");
$x = imagesx($thumb);
$y = imagesy($thumb);
if(($max_x/$max_y) < ($x/$y)){
$eind = imagecreatetruecolor($x/($x/$max_x), $y/($x/$max_x)) or die("Fout: imagecreattreucolor() 1");
}else{
$eind = imagecreatetruecolor($x/($y/$max_y), $y/($y/$max_y)) or die("Fout: imagecreattreucolor() 2");
}
imagecopyresized($eind, $thumb, 0, 0, 0, 0, imagesx($eind), imagesy($eind), $x, $y) or die("Fout: imagecopyresized()");
imagegif($eind, $thumb_dir.$_FILES['bestand']['name']) or die("Fout: imagegif()");
imagedestroy($thumb);
imagedestroy($eind);
echo "<br><br>De foto is geüpload";
}
}
?>
Zoals je ziet heb ik op lijn 37 bmp toegevoegd.
GD-functies van PHP. Kennelijk kan (jouw installatie van) GD geen bitmapbestanden verwerken.
Je kunt prima die bestanden uploaden, maar PHP gaat ze vervolgens proberen te verwerken. Hiervoor pakt hij de Is er toevallig een ander script die ook een thumb aanmaakt en bmp ondersteund?
Gewijzigd op 01/01/1970 01:00:00 door Patrick Vaarkamp
php.net zegt => imagecreatefromwbmp (zie de extra W) geen idee of het uitmaakt.
Die functie heb ik al geprobeert, Helpt helaas niet.
of een simpel plaatje:
Code (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
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
<?php
// Set the content-type
header("Content-type: image/png");
// Create the image
$im = imagecreatetruecolor(400, 30);
// Create some colors
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 399, 29, $white);
// The text to draw
$text = 'Testing... • of •';
// Replace path by your own font path
$font = 'arial.ttf';
// Add some shadow to the text
imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);
// Add the text
imagettftext($im, 20, 0, 10, 20, $black, $font, $text);
// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($im);
imagedestroy($im);
?>
// Set the content-type
header("Content-type: image/png");
// Create the image
$im = imagecreatetruecolor(400, 30);
// Create some colors
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 399, 29, $white);
// The text to draw
$text = 'Testing... • of •';
// Replace path by your own font path
$font = 'arial.ttf';
// Add some shadow to the text
imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);
// Add the text
imagettftext($im, 20, 0, 10, 20, $black, $font, $text);
// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($im);
imagedestroy($im);
?>
deze webpagina te zien. Die functie bestaat dus helemaal niet :)
Als ik op php.net zoek op de functie imagecreatefrombmp krijg ik Dit is de gd info die ik krijg:
array(12) { ["GD Version"]=> string(27) "bundled (2.0.34 compatible)" ["FreeType Support"]=> bool(true) ["FreeType Linkage"]=> string(13) "with freetype" ["T1Lib Support"]=> bool(false) ["GIF Read Support"]=> bool(true) ["GIF Create Support"]=> bool(true) ["JPG Support"]=> bool(true) ["PNG Support"]=> bool(true) ["WBMP Support"]=> bool(true) ["XPM Support"]=> bool(true) ["XBM Support"]=> bool(true) ["JIS-mapped Japanese Font Support"]=> bool(false) }
xbmp wel, maar dat is heel wat anders!
.bmp is windows only en antiek qua formaat en de groote van de bestanden.
Zijn wel oplossingen voor gemaakt en bedacht... google-je-rot...
Maar persoonlijk accepteer ik ze niet eens meer...
imagecreatefrombmp. Voordeel is dat BMP zo 'dom' is dat het gewoon simpelweg de kleur per pixel opslaat. Daarom is het bestand ook zo groot.
BMP wordt helaas nog vrij veel gebruikt door mensen die hun foto in Paint bewerken, en vervolgens maar gewoon op opslaan als drukken. Die kiest volgens mij vanzelf voor BMP (vanaf XP heb je pas JPG in het lijstje?) en vervolgens sturen ze dat bestand als foto in. Voor een userbase die niet al te veel van computers af weet is het dan wel prettig als ze gewoon BMP kunnen insturen.
BMP wordt helaas nog vrij veel gebruikt door mensen die hun foto in Paint bewerken, en vervolgens maar gewoon op opslaan als drukken. Die kiest volgens mij vanzelf voor BMP (vanaf XP heb je pas JPG in het lijstje?) en vervolgens sturen ze dat bestand als foto in. Voor een userbase die niet al te veel van computers af weet is het dan wel prettig als ze gewoon BMP kunnen insturen.
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -