[PHP] waarde functie returnen en aanroepen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heren tweakerts,

Waarschijnlijk een vrij basic vraag, maar ik krijg het niet echt voor elkaar. Ik ben bezig met een image resize functie, die ook een melding moet returnen. Op basis van de melding die geturned wordt zal uiteindelijk een melding in het form geprint worden.

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
function mkthumb($dirname, $filename, $minheight, $minwidth, $newfilename, $thumbdir, $thumb_size)
{
    if (isset($filename))
    {
        //get filetype and check to make sure it is an accepable image. if gif, jpeg, or png create
        //source image.
        $imtype = exif_imagetype($dirname.$filename);
    
        switch($imtype)
        {
        case 1 : //Image is type gif.
        $im = imagecreatefromgif($dirname.$filename);
        break;
        case 2 : //Image is type jpeg.
        $im = imagecreatefromjpeg($dirname.$filename);
        break;
        case 3 : //Image is png.
        $im = imagecreatefrompng($dirname.$filename);
        break;
        default : //File not accepted.
        echo "Error: $filename is an invalid file.<br>";
        break;
        }

            if (isset($im)) 
                {
                //get width of source photo.
                $width = ImageSX($im);
                $height = ImageSY($im);
                    if ($width > $minwidth) {

                        if ($width < $height)
                        {
                        $asp_ratio = $thumb_size/$height;
                        }
                        else
                        {
                        $asp_ratio = $thumb_size/$width;
                        }

                        //calculate thumb width using aspect ratio percetage.
                        $thumb_width = round(($width * $asp_ratio));
                        $thumb_height = round(($height * $asp_ratio));
    
                        //create thumb image.
                        $im_thumb = imagecreatetruecolor($thumb_width, $thumb_height);
                
                        //resize and copy source image to the thumb image.
                        imagecopyresampled($im_thumb, $im, 0, 0, 0, 0, $thumb_width, $thumb_height, $width,$height);
                        //create 
                        switch($imtype)
                        {
                        case 1 : //Image is type gif.
                        $im_new = imagegif($im_thumb,$thumbdir.$newfilename);
                        break;
                        case 2 : //Image is type jpeg.
                        $im_new = imagejpeg($im_thumb,$thumbdir.$newfilename);
                        break;
                        case 3 : //Image is png.
                        $im_new = imagepng($im_thumb,$thumbdir.$newfilename);
                        break;
                        default :
                        $im_new = imagejpeg($im_thumb,$thumbdir.$filename);
                        break;
                        } 
                        imagedestroy($im);
                        imagedestroy($im_thumb);
                }
                else
                {
                $melding =  "Dit filetype wordt niet ondersteund";
                return $melding;
                }
            }
            else 
            {
            $melding = 'Uw bestand is te klein';
            return $melding;
            }
    }
    else
    {
    $melding = "U heeft geen bestand ingegeven";
    return $melding;
    }
}
    
if ($_SERVER['REQUEST_METHOD']=='POST'){ 

    //$sourcedir - Path waar het temp bestand geupload is
    //$sourcename - Bestandsnaam van het bronbestand
    //$minheight - Minimale hoogte van het bronbestand
    //$minwidth - Minimale breedte van het bronbestand
    //$newfilename - Bestansnaam van de aangemaakte thumbnail
    //$thumbdir - Path waar de thumbnail opgeslagen wordt
    //$thumb_size - Desired size of the longest side of the thumb in pixels. Default is 120.

    $sourcedir = 'C:\Program Files\xampp\tmp\\';
    $extensie = explode ('\\', $_FILES['foto']['tmp_name']);
    $sourcename = $extensie[4];
    $minheight = 1000;
    $minwidth = 1000;
    $newfilename = 'small001';
    $thumbdir = 'thumbnails/';
    $size = '120';

    mkthumb($sourcedir, $sourcename, $minheight, $minwidth, $newfilename, $thumbdir, $size); 
    $melding = mkthumb();
    print ("$melding"); print ("<br>");
    }
    else {
    // doe iets anders een form printen of zo
}


Klopt het dat dit script de waarde van $melding zal returnen en dat ik deze kan aanroepen door de functie opnieuw aan te roepen zonder input parameters? Dus als volgt: $melding = mkthumb();

Ik loop vast op een paar kleine dingen, waarschijnlijk is het niet zo heel erg ingewikkeld. Bedankt alvast!

Acties:
  • 0 Henk 'm!

Verwijderd

PHP:
1
2
3
4
5
6
7
8
9
  function DoeIets(Parameter1, Parameter2) {
     // mega interessante code
    $melding = "ik ben gaaf";
    return $melding
  }
[..]

  $melding = DoeIets(Param1, Param2);
  echo $melding;


Overigens zou ik (aangezien je nog aan het leren bent) NU iets doen aan je identatie (gebruik van spaties etc. Het is een beetje afhankelijk van persoonlijke voorkeuren, maar de manier waarop jij het doet, heb ik nog nooit eerder gebruikt zien worden.

Veel gangbaarder is bv:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if (statement) {
    statement1;
    statement2;
}
[..]
switch (variable) {
    case waarde1:
        blaat;
        blaat;
    break;
    case waarde2:
        balk;
        balk;
    break;
}


enzovoort..

[ Voor 56% gewijzigd door Verwijderd op 07-02-2006 23:15 ]


Acties:
  • 0 Henk 'm!

  • Cyphax
  • Registratie: November 2000
  • Laatst online: 16:52

Cyphax

Moderator LNX
Verwijderd schreef op dinsdag 07 februari 2006 @ 23:07:

Klopt het dat dit script de waarde van $melding zal returnen en dat ik deze kan aanroepen door de functie opnieuw aan te roepen zonder input parameters? Dus als volgt: $melding = mkthumb();
Nee, dan roept ie 'm een tweede keer aan, hoewel dat niet goed gaat omdat je geen parameters meegeeft.
Doe het zo:
$melding=mkthumb($sourcedir, $sourcename, $minheight, $minwidth, $newfilename, $thumbdir, $size);
En dan ga ik er even vanuit dat je functie gewoon werkt. :P

Saved by the buoyancy of citrus


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 20-09 22:44

MBV

Wat wil je met mkthumb() gaan doen? je krijgt dan immers altijd "u hebt geen bestand opgegeven". Je zal dus heel voorzichtig moeten doen met $melding, de eerste keer dat je hem aanroept.

Daarnaast nog wat tips: je kan beter je if-statements omdraaien, zodat je eerst het bijzondere geval afhandelt (de foutmelding) en daarna de 'gewone' dingen. Dat maakt je code veel overzichtelijker. Vooral omdat je de if-statements niet documenteert...
Je case-default zou ik anders doen. Je error-melding zit in $melding, dus die hoef je daar niet te doen. Verder zou ik er $im=-1 neerzetten, en daar op checken in je if-statement. Duidelijker wat er dan gebeurt.

@hierboven: indentation kan op 3 gangbare manieren (onafhankelijk van taal)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
if (condition) {
   statement
} else {
   statement
}

if (condition) {
   statement
}
else {
   statement
}

if (condition) 
{
  statement
}
else
{
  statement
}

Ik gebruik meestal de laatste, om duidelijk aan te geven waar het mega interessante stuk begint :). En de 1e kwalificeer ik hierbij als onleesbaar :P

[ Voor 29% gewijzigd door MBV op 07-02-2006 23:20 . Reden: wat zijn jullie toch weer snel allemaal... ]


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Wat optimalisaties:
PHP:
1
2
                $melding =  "Dit filetype wordt niet ondersteund";
                return $melding;
Deze constructie heb je een paar keer, maar je kan natuurlijk ook meteen return 'Wa!'; doen. Als je nou op regel 21 de echo door return vervangt, weet je ook zeker dat die functie daar stopt en scheelt het je ook weer die hele if conditie op regel 25.

(een beetje wat MBV zegt dus. :P )

[ Voor 27% gewijzigd door Voutloos op 07-02-2006 23:19 ]

{signature}


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 20-09 22:44

MBV

Voutloos schreef op dinsdag 07 februari 2006 @ 23:17:
Wat optimalisaties:
PHP:
1
2
                $melding =  "Dit filetype wordt niet ondersteund";
                return $melding;
Deze constructie heb je een paar keer, maar je kan natuurlijk ook meteen return 'Wa!'; doen. Als je nou op regel 21 de echo door return vervangt, weet je ook zeker dat die functie daar stopt en scheelt het je ook weer die hele if conditie op regel 25.

(een beetje wat MBV zegt dus. :P )
Ehhmm, dat zeg ik helemaal niet. Ik zeg dat hij na een if-statement eerst de fout moet afvangen (if (not condition) $message = "foutje"; else { mega-interessant}), niet dat hij het in 1x moet doen. Zoals hij het nu heeft is idd bagger (had ik zelfs overheen gelezen).

Wat IMHO beter is, is een paar keer $message="error" neer te zetten, en dan pas aan het eind return te doen. Veel eenvoudiger debuggen, en je cyclomatic complexity gaat dramatisch veel omlaag (zoekterm: McCabe). Je zal dan niet meer hebben dat je afvraagt waarom je programma over een bepaald stuk code heen is gesprongen, wat niet logisch zou zijn met de if-statements.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heren,

In principe ben ik er al uit, het ging me er eigenlijk alleen om hoe ik die waarde kon uit de functie kon returnen om hem te gebruiken in de rest van het script. Ik heb deze functie overigens niet zelf geschreven, alleen iets aangepast. Dat hij niet optimaal werkt neem ik voor lief, want hij doet wat ik wil.

Weet een van jullie overigens welke" php add-ons" deze functie nodig heeft om de verschillende functies die hij weer gebruikt te kunnen uitvoeren? Is dat iets van GD2 of zo?

Bedankt voor jullie hulp in elk geval.

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Verwijderd schreef op woensdag 08 februari 2006 @ 09:54:
Weet een van jullie overigens welke" php add-ons" deze functie nodig heeft om de verschillende functies die hij weer gebruikt te kunnen uitvoeren? Is dat iets van GD2 of zo?
Haal de namen van de image* functies door een zoekmachine en je weet het binnen 5s. ;)

{signature}


Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 20-09 22:44

MBV

hij heeft geen add-on nodig, alleen de goede versie PHP. Je kunt op www.php.net/imagejpeg (goh wat handig, hij zoekt zo direct de goede functie ;) ) de benodigdheden vinden voor die functie. Als er een functie niet gevonden wordt, zoek je dus die functie op, en kijk je welke versie je nodig hebt. Je huidige versie kan je met phpinfo() opvragen.
Pagina: 1