foto rename, resize en upload

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Krist Ensing

Krist Ensing

24/08/2013 20:31:30
Quote Anchor link
Ik heb een class geschreven om foto's te renamen, resizen en te uploaden.
Dit is de klasse
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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;
}
}}

?>

De klasse wordt aangeroepen vanuit het registratieformulier, waarvan hier de relante code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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()
            )
                )
        );

?>

        

Dit formulier wordt gerendert in PhotoElement:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php


class PhotoElement extends Element {

    public function render()
    {

        $html = '';
        $html .= '<label>' . $this->label;
        $html .= "<input type='file' name='{$this->name}' value='{$this->value}' $this->attribs>";
        $html .= '</label>';
        
        return $html;
    }
}

?>


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

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 -
 
PHP hulp

PHP hulp

05/01/2025 09:37:18
 
Frank Nietbelangrijk

Frank Nietbelangrijk

24/08/2013 23:02:12
Quote Anchor link
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.
 
Krist Ensing

Krist Ensing

25/08/2013 17:01:25
Quote Anchor link
Als ik de code verander in:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$extension = strtolower($this->getExtension($value));
    $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
 
Frank Nietbelangrijk

Frank Nietbelangrijk

25/08/2013 17:35:03
Quote Anchor link
- Je laat je code NIET netjes inspringen waardoor je het overzicht kwijt raakt wat waar bij hoort
- 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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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 ..

};

?>
Gewijzigd op 25/08/2013 17:46:04 door Frank Nietbelangrijk
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

25/08/2013 18:01:00
Quote Anchor link
Regel 13 t/m 26 zijn volledig overbodig.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.