[PHP]Script maakt maar 1 thumbnail ipv meerdere

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dit hieronder is het complete script.
Het gaat vooral om de regels 97 en 98.
Als ik in plaats van maakthumb($m,$img) een echo doe (zoals er onderstaat) dan gaat ie wel alle files af, maar als ik em daadwerkelijk de thumbnails wil laten maken dan doet ie alleen de eerste file die die tegenkomt.

Weet iemand wat ik fout doe of vergeet? Alvast bedankt.

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
<?php 
  function scanfiles($dir) 
  { 
    $open=opendir($dir); 
    $n_ext=array('jpg','gif','JPG','GIF');  

    while($items=readdir($open)) 
        { 
           list($filenaam, $ext) = explode('.', $items); 
          if(in_array($ext,$n_ext)==TRUE) 
          { 
            $pictarray[]=$items; 
          } 
          else{} 
      } 
    return $pictarray; 
  } 
   
function scandir($dir) 
{ 
  $open=opendir($dir); 
  $n_ext=array('.','..'); 

  while($items=readdir($open)) 
  { 
    if(is_dir($dir.$items)==TRUE && in_array($items, $n_ext)==FALSE) 
    { 
      $mapsarray[]=$items;     
    } 
    else{}  
  } 
return $mapsarray; 
} 

function maakthumb($map,$file) 
{ 
    $sImage = $map.$file;  
         
    // Haal de afmeting gegevens van het plaatje 
      $aData = getimagesize($sImage);  
      $iSizeX = $aData[0];  
      $iSizeY = $aData[1];  

    // Maak een nieuw truecolor-plaatje van de gewensde afmeting 
    $imgDest = imagecreatetruecolor(160, 120);  

      // Open het bestaande plaatje 
      $imgSrc = imagecreatefromjpeg($sImage);  

    // Kopieer het bestaande plaatje naar het nieuwe plaatje (resizen) 
    $t1=imagecopyresampled($imgDest, $imgSrc, 0, 0, 0, 0, 160, 120, $iSizeX, $iSizeY);   
    // Schrijf het nieuwe plaatje als een JPG in de map 'thumbs' 
    $t2=imagejpeg($imgDest, $m.'thumbs/tn_'.$file ,75); 
     
    echo $img.' :  ' .$imgDest .',  '. $imgSrc. ', '.$t1. ', '.$t2.'<br>'; 
} 
//------------------------------------------------------------------------- 
  set_time_limit(120*60); 
  include("../secure/core.php"); 

  $orgsql = mysql_query("SELECT * FROM organisatie");  
  while($organisatie = mysql_fetch_row($orgsql)) 
  { 
    $sql = mysql_query("SELECT school_map.* FROM school_map, organisatie_klant WHERE organisatie_klant.klant_id = school_map.schoolid AND organisatie_klant.organisatie_id=".$organisatie[0]); 
    while($schoolmap = mysql_fetch_row($sql)) 
    { 
        $map = '../'.$organisatie[1].'/'.$schoolmap[1].'/Foto/'; 
            $maplist = scandir($map); 
         
         for($i=0;$i<sizeof($maplist);$i++) 
        {   
              $mapnaam = $maplist[$i]; 
            $m = '../'.$organisatie[1].'/'.$schoolmap[1].'/Foto/'.$mapnaam.'/'; 
             
               if(file_exists($m.'thumbs')==FALSE) 
            { 
                // map aanmaken 
                $temp= $m.'thumbs'; 
                mkdir($temp); 
                //map chmodden 
                  chmod($temp,0777);  
            } 
            else{ } 
         
                $filelist = scanfiles($m);         
                                 
                for($t=0;$t<sizeof($filelist);$t++) 
                { 
                      $img = $filelist[$t];                 
                      $extensie = strtolower(substr($img,-3)); 

                    if($extensie=="jpg" || $extensie=="gif") 
                      { 

                        if(!file_exists($m.'thumbs/tn_'.$img)) 
                        { 
                            $check = maakthumb($m,$img); 
                            //echo $img . ' thumb gemaakt!<br>'; 
                        } 
                        else 
                        { 
                            echo $img." is al een thumb<br>"; 
                        } 

                    } 
                    else 
                    { 
                         echo $img.' is geen plaatje!<br>'; 
                    }   
                   
                } 
                         
         
        echo'Er zijn thumbnails gemaakt voor de organisatie: ' . $organisatie[1]. ' voor de school: ' . $schoolmap[1]. ' in de map: ' .$mapnaam. '<br>';      
        }    
       } 
  } 
?> 

[ Voor 7% gewijzigd door Verwijderd op 08-03-2005 13:58 ]


Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

1. Code tussen [ php] en [ /php] zetten geeft ook kleur, leest makkelijker.
2. Staat je error_reporting al op E_ALL?
3. Als je van $check op 97 geen Array maakt zal deze altijd alleen de laatste bevatten.

// Edit

4. De functie maaktumb() zou ik TRUE of FALSE laten returnen, checkt makkelijker.
5. ImageJPEG() werkt alleen goed op image/jpg, image/gif geeft plaatjes met errors.
6. De volgende code kun je weg laten:
PHP:
1
else {}


Verder zie ik zo 1,2,3 even niet waarom hij stopt na 1.

[ Voor 47% gewijzigd door OkkE op 08-03-2005 14:25 ]

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 18:04
Doe een $check[] ;)

Dan is $check een verzameling van plaatjes, nu slechts een platte variabele (met laatste plaatje omdat de voorgangers steeds overschreven worden) :) Maar eigenlijk zou je ze denk ik op die plaats willen wegschrijven toch? Dus moet je lijkt me zoiets doen op die plaats:

code:
1
2
3
4
5
6
7
8
$thumb_data = maakthumb($m, $img);
if(!$thumb_data) { echo "Couldn't create thumb for: $m/$img<br />"; }
else
{   $thumb_file = $m . 'thumbs/tn_' . $img;
    $thumb_handle = fopen($thumb_file, 'w');
    fwrite($thumb_handle, maakthumb($m, $img);
    fclose($thumb_handle);
}

Edit aangepaste versie die eerst checkt of het thumben gelukt is

@Okke: mjah zie het nu... Ff te snel gereageerd, dacht dat maakthumb() het plaatje returnde... foutje dus :) De vraag van TS gaat dan dus vooral over maakthumb() en waarom het wegschrijven daar faalt, heeft dus niks met regels 97 / 98 te maken :)

code:
53
$t2=imagejpeg($imgDest, $m.'thumbs/tn_'.$file ,75);

$m moet daar zijn $map (binnen de makethumb-functie)...

[ Voor 164% gewijzigd door Morrar op 08-03-2005 14:37 ]


Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

@Morrar: Op regel 53 wordt het plaatje al opgeslagen/weggeschreven. :)

// Edit

Ik zie toch echt nog een hoop "fouten" in de code.. Is het misschien niet beter gewoon een standaard script van internet (bijv. www.hotscripts.com) te downloaden?

Kijk eens naar dit stukje:
PHP:
1
2
3
4
$extensie = strtolower(substr($img,-3)); 

if($extensie=="jpg" || $extensie=="gif") 
{

En bedenk dan eens wat er zou gebeuren met de volgende bestanden:
• file.jpeg
• file.png
• file.bmp
• file.php.jpg
• file.jpg.tmp

En zo kan ik nog wel een aantal punten opnoemen die beter kunnen...

[ Voor 84% gewijzigd door OkkE op 08-03-2005 15:05 ]

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Morrar schreef op dinsdag 08 maart 2005 @ 14:10:
code:
53
$t2=imagejpeg($imgDest, $m.'thumbs/tn_'.$file ,75);

$m moet daar zijn $map (binnen de makethumb-functie)...
Dank je daar had ik inderdaad overheen gelezen, al stond die tekst eerst op de plaats van de functie-aanroep.

Nu doet ie het voor 1 map, maar dat kan met de aanroep te maken hebben al snap ik dat nog niet helemaal precies waarom dat zou zijn. Maar daar kijk ik vanavond wel naar.

De code is nu alsvolgt:

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
function maakthumb($map,$file)
{
    $sImage = $map.$file; 
        
    // Haal de afmeting gegevens van het plaatje
    $aData = getimagesize($sImage); 
    $iSizeX = $aData[0]; 
    $iSizeY = $aData[1]; 

    // Maak een nieuw truecolor-plaatje van de gewensde afmeting
    $imgDest = imagecreatetruecolor(160, 120); 

    // Open het bestaande plaatje
    $imgSrc = imagecreatefromjpeg($sImage); 

    // Kopieer het bestaande plaatje naar het nieuwe plaatje (resizen)
    imagecopyresampled($imgDest, $imgSrc, 0, 0, 0, 0, 160, 120, $iSizeX, $iSizeY);  
    // Schrijf het nieuwe plaatje als een JPG in de map 'thumbs'
    imagejpeg($imgDest, $map.'thumbs/tn_'.$file ,75);
    
    if(file_exists($map.'thumbs/tn_'.$file))
    {return TRUE;
    }
    else
    {return FALSE;
    }
}


De rest van de code is nog niet relevant. Het gaat er even om dat de thumbnails gemaakt worden.
Daarna komen die verbeteringen aan de beurt. Er wordt nog aan gewerkt.

[ Voor 8% gewijzigd door Verwijderd op 08-03-2005 15:15 ]


Acties:
  • 0 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 18:04
Dat laatste is een beetje onnodig imho. Volgens mij kun je gewoon doen:
code:
1
return imagejpeg($imgDest, $map.'thumbs/tn_'.$file ,75);

imagejpeg() geeft zelf nl. al een TRUE / FALSE terug als het wel / niet gelukt is het plaatje te maken

Waarom ie maar 1 map doet weet ik zo snel niet, kan aan veel dingen liggen. Zal eens kijken. Kijk trouwens zelf ook even naar de suggesties van Okke. Hij heeft een paar zeer goede punten en je code is nogal ranzig dus je kan het er behoorlijk mee opknappen. Ik vermoed verder dat het probleem inderdaad te maken heeft met de aanroep, echo eens die sizeof($maplist) zou ik zeggen.

Edit: en readdir()'s moeten officieel zo:
code:
1
while(FALSE !== ($file = readdir($handle))) { }

[ Voor 22% gewijzigd door Morrar op 08-03-2005 17:21 ]

Pagina: 1