foto rename, resize en upload
Dit is de klasse
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
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
<?php
class PhotoValidator extends AbstractValidator
{
$docroot = $_SERVER['DOCUMENT_ROOT'];
$image = isset($_FILES["image"]["name"]) ? $_FILES["image"]["name"] : '';
public function isValid($value) {
if (!empty($value)) {
$extension = strtolower(getExtension($value));
$filename = mt_rand() . "." . $extension;
if (is_uploaded_file($_FILES['image']['tmp_name'])) {
$uploadedfile = $_FILES['image']['tmp_name'];
} else {
die("Het bestand is niet op de juiste manier geupload.");
}
$imageinfo = getimagesize($uploadedfile);
if (!$imageinfo) {
die("Dit is geen afbeelding!");
// header('location:http://www.cook2gether.nl/index.php');
}
list ($width, $height) = $imageinfo;
$type = strtolower($imageinfo['mime']);
$size = filesize($_FILES['image']['tmp_name']);
if (strstr($type, 'jpg') || strstr($type, 'jpeg')) {
$src = imagecreatefromjpeg($uploadedfile);
} else if (strstr($type, 'png')) {
$src = imagecreatefrompng($uploadedfile);
} else {
$src = imagecreatefromgif($uploadedfile);
}
$newwidth1 = 200;
$newheight1 = ($height / $width) * $newwidth1;
$tmp1 = imagecreatetruecolor($newwidth1, $newheight1);
imagecopyresampled($tmp1, $src, 0, 0, 0, 0, $newwidth1, $newheight1, $width, $height);
$filename = "$docroot/mcphp/sameneten/images/" . $filename;
if (strstr($type, 'jpg') || strstr($type, 'jpeg')) {
$etest2 = imagejpeg($tmp1, $filename, 100);
} else if (strstr($type, 'png')) {
$etest2 = imagepng($tmp1, $filename, 6);
} else {
$etest2 = imagegif($tmp1, $filename);
}
imagedestroy($src);
imagedestroy($tmp1);
}
function getExtension($str) {
$i = strrpos($str, ".");
if (!$i) {
return "";
}
$l = strlen($str) - $i;
$ext = substr($str, $i + 1, $l);
return $ext;
}
}}
?>
class PhotoValidator extends AbstractValidator
{
$docroot = $_SERVER['DOCUMENT_ROOT'];
$image = isset($_FILES["image"]["name"]) ? $_FILES["image"]["name"] : '';
public function isValid($value) {
if (!empty($value)) {
$extension = strtolower(getExtension($value));
$filename = mt_rand() . "." . $extension;
if (is_uploaded_file($_FILES['image']['tmp_name'])) {
$uploadedfile = $_FILES['image']['tmp_name'];
} else {
die("Het bestand is niet op de juiste manier geupload.");
}
$imageinfo = getimagesize($uploadedfile);
if (!$imageinfo) {
die("Dit is geen afbeelding!");
// header('location:http://www.cook2gether.nl/index.php');
}
list ($width, $height) = $imageinfo;
$type = strtolower($imageinfo['mime']);
$size = filesize($_FILES['image']['tmp_name']);
if (strstr($type, 'jpg') || strstr($type, 'jpeg')) {
$src = imagecreatefromjpeg($uploadedfile);
} else if (strstr($type, 'png')) {
$src = imagecreatefrompng($uploadedfile);
} else {
$src = imagecreatefromgif($uploadedfile);
}
$newwidth1 = 200;
$newheight1 = ($height / $width) * $newwidth1;
$tmp1 = imagecreatetruecolor($newwidth1, $newheight1);
imagecopyresampled($tmp1, $src, 0, 0, 0, 0, $newwidth1, $newheight1, $width, $height);
$filename = "$docroot/mcphp/sameneten/images/" . $filename;
if (strstr($type, 'jpg') || strstr($type, 'jpeg')) {
$etest2 = imagejpeg($tmp1, $filename, 100);
} else if (strstr($type, 'png')) {
$etest2 = imagepng($tmp1, $filename, 6);
} else {
$etest2 = imagegif($tmp1, $filename);
}
imagedestroy($src);
imagedestroy($tmp1);
}
function getExtension($str) {
$i = strrpos($str, ".");
if (!$i) {
return "";
}
$l = strlen($str) - $i;
$ext = substr($str, $i + 1, $l);
return $ext;
}
}}
?>
De klasse wordt aangeroepen vanuit het registratieformulier, waarvan hier de relante code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$photo = new PhotoElement();
// we kunnen een element aanmaken en pas daarna de opties zetten, zoals hier:
$photo->setOptions(array(
'name' => 'photo',
'label' => 'foto: ',
'value' => '',
'validators' => array(
new PhotoValidator(array() /* no options necessary */),
),
'filters' => array(
new FilterStripTags(),
new FilterTrim()
)
)
);
?>
$photo = new PhotoElement();
// we kunnen een element aanmaken en pas daarna de opties zetten, zoals hier:
$photo->setOptions(array(
'name' => 'photo',
'label' => 'foto: ',
'value' => '',
'validators' => array(
new PhotoValidator(array() /* no options necessary */),
),
'filters' => array(
new FilterStripTags(),
new FilterTrim()
)
)
);
?>
Dit formulier wordt gerendert in PhotoElement:
Code (php)
Ik krijg de foutmelding:
Quote:
Fatal error: Call to undefined function getExtension() in C:\wamp\www\mcphp\Form\PhotoValidator.php on line 14
Call Stack
# Time Memory Function Location
1 0.0011 259224 {main}( ) ..\formulier.php:0
2 0.0249 631376 Form->isValid( ) ..\formulier.php:19
3 0.0255 636264 Element->isValid( ) ..\Form.php:68
4 0.0255 636392 PhotoValidator->isValid( ) ..\Element.php:86
Call Stack
# Time Memory Function Location
1 0.0011 259224 {main}( ) ..\formulier.php:0
2 0.0249 631376 Form->isValid( ) ..\formulier.php:19
3 0.0255 636264 Element->isValid( ) ..\Form.php:68
4 0.0255 636392 PhotoValidator->isValid( ) ..\Element.php:86
Wat gaat er mis??
In de PhotoValidator class krijg ik bovenaan een foutmelding, bij de regel:
$docroot = $_SERVER['DOCUMENT_ROOT'];
foutmelding is:
unexpected variabel after{
expected: function, const, us
Maar waar moet ik die variabelen dan definieren??
(Maar deze foutmelding heeft niet te maken met de 'undefined function getExtension()'.
Wie o wie kan me helpen???
Gewijzigd op 24/08/2013 20:35:54 door - Ariën -
Zoals de foutmelding duidelijk aangeeft kan hij geen functie vinden die getExtension heet. Dit komt in werkelijkheid omdat je de functie binnen de class hebt gedeclareerd. Zo een functie als onderdeel van een class noemen we dan ook liever een Method, en een Method roep je vanuit dezelfde class aan met $this->getExtension. jij doet alleen getExtension() en dus zoekt hij buiten de eigen class naar een functie met de naam getExtension.
Code (php)
1
2
2
$extension = strtolower($this->getExtension($value));
$filename = mt_rand() . "." . $extension;
$filename = mt_rand() . "." . $extension;
Krijg ik wederom een gelijkende foutmelding:
Fatal error: Call to undefined method PhotoValidator::getExtension() in C:\wamp\www\mcphp\Form\PhotoValidator.php on line 14
Wat doe ik niet goed?
Gewijzigd op 25/08/2013 17:04:57 door Krist Ensing
- de code op regel 8 moet vooraf gaan met var, public, protected of private. (Het liefst private)
- vanaf regel 9 kan niet. dat hoort in een method thuis.
Toevoeging op 25/08/2013 17:43:40:
hier een voorbeeld hoe er wel netjes wordt ingesprongen en hoe een class er 'gezond' uit ziet.
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
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
<?php
class PhotoValidator extends AbstractValidator
{
// properties
private $docroot;
// de constructor wordt doorgaans gebruikt om de properties te setten
function __construct()
{
$this->_setDocroot($_SERVER['DOCUMENT_ROOT']);
}
// public functions
public function getDocroot()
{
return $this->docroot;
}
// en nog meer public functions ..
// private functions
public function _setDocroot($docroot)
{
$this->docroot = $docroot;
}
// en nog meer private functions ..
};
?>
class PhotoValidator extends AbstractValidator
{
// properties
private $docroot;
// de constructor wordt doorgaans gebruikt om de properties te setten
function __construct()
{
$this->_setDocroot($_SERVER['DOCUMENT_ROOT']);
}
// public functions
public function getDocroot()
{
return $this->docroot;
}
// en nog meer public functions ..
// private functions
public function _setDocroot($docroot)
{
$this->docroot = $docroot;
}
// en nog meer private functions ..
};
?>
Gewijzigd op 25/08/2013 17:46:04 door Frank Nietbelangrijk
Regel 13 t/m 26 zijn volledig overbodig.