[PHP] Imagejpeg() : Write probleem

Pagina: 1
Acties:
  • 1.750 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Griffin
  • Registratie: Maart 2003
  • Laatst online: 18-09 07:59

Griffin

Is mythical

Topicstarter
Om maar gelijk met de deur in huis te vallen, ik heb de volgende foutmelding:
Warning: imagejpeg() [function.imagejpeg]: Unable to open 'gallery\photos\thumb\thumb_Amsterdam_bar.JPG' for writing: Permission denied in PATH-TO-ROOT\gallery\gallery.class.php on line 183
PATH-TO-ROOT = even cencuur van dir structure tot aan mijn site root.

Wat probeer ik:
Ik stuur de locatie van een plaatje door naar mijn 'makeThumb' functie in een klasse, deze klasse moet er een thumb van maken en in een andere map weg schrijven (dus niet de map waar de grote afbeelding in zit). De functie stuurt de path van het plaatje terug en dit moet dan weer gegeven worden.

Even wat code van de methode:
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
function makeThumbs($category, $imageName, $imageUrl)
    {
        $thumb_name = "thumb_".$category."_".$imageName;
        $thumb_dir = $this->img_root ."thumb".DIRECTORY_SEPARATOR;
        
        //Open bigImg
        $image_extention = $this->stripExtention($imageName);//Getting Extention from the image
        if($image_extention == "jpg" || $image_extention == "jpeg" || $image_extention == "png" || $image_extention == "gif")
        {
            if(!$this->checkThumb($thumb_name))
            {
                if($image_extention == "jpg" || $image_extention == "jpeg")
                    $img = imagecreatefromjpeg($imageUrl) or die ("Jpg problem");
                elseif($image_extention == "png")
                    $img = imagecreatefrompng($imageUrl) or die ("PNG problem");
                elseif($image_extention == "gif")
                    $img = imagecreatefromgif($imageUrl) or die ("GIF problem");
                
                $maxThumbWidth = 120; //max width of the thumb
                $maxThumbHeight = 120; //max height of the thumb
                
                $img_x = imagesx($img); //Width of the original
                $img_y = imagesy($img); //Height of the original
                
                // resize               
                if($img_y >= $img_x)
                {
                    $factor = $img_y / $maxThumbHeight;
                    $thumb_x = $img_x / $factor;
                    $thumb_y = $img_y / $factor;
                }
                else
                {
                    $factor = $img_x / $maxThumbWidth;
                    $thumb_y = $img_y / $factor;
                    $thumb_x = $img_x / $factor;
                }
                
                //Make temp thumb with Thumb x and y
                $thumb = imagecreatetruecolor($thumb_x, $thumb_y);
                
                //make final thumb
                imagecopyresampled($thumb, $img, 0, 0, 0, 0, $thumb_x, $thumb_y, $img_x, $img_y);
                
                //Save final thumb
                imagejpeg($thumb, $thumb_dir.$thumb_name, 100);
                
                //removing the 2 images from memory
                imagedestroy($img);
                imagedestroy($thumb);
            }   
            return $thumb_dir . $thumb_name;
        }
    }



de bovenstaande code is geinspireerd op scripts die gevonden zijn hier op GoT en wat aan de helpdeskvrienden gevraagd.

Zoals de error(bovenaan deze reply) al aangeeft gaat er ergens iets fout met permissions bij het " imagejpeg($thumb, $thumb_dir.$thumb_name, 100); ".

Eerst had ik het lokaal draaien op mn wamp server, maar toen kwam ik de error tegen.
Dus ik aan een vriend gevraagd en die heeft mij even een subdomain gegeven op een windows webserver met ftp access etc. Op deze manier kan ik namelijk met chmod op de mappen aan de gang.

Ik heb nu chmod777 op de PHOTO map staan + alle onderliggende mappen en bestanden. Hierdoor zijn de afbeeldingen waarvan een thumb gemaakt moet worden chmod777 en ook de dir waar de thumb in moet. (dit heb ik gedaan om even zeker van te zijn).


Waar zou het aan kunnen liggen??

PS: als ik informatie ben vergeten te vermelden, zeg dit dan dan plaats ik het even

[ Voor 16% gewijzigd door Griffin op 29-10-2007 13:20 ]


Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

offtopic:
Wat een rommel-code, je directory hardcoded, or die(), hardcoded filenames, hardcoded image size, platform-specific directory separators :X


wamp server == WAMP? Lijkt me niet direct een permissions probleem aangezien WAMP draait onder de user waarmee je runt. Probeer anders PHP eens de directory aan te laten maken (dmv mkDir()), en er dan naar schrijven?

[edit]
En resizen kan je beter doen met ImageCopyResampled(), scheelt je een hoop code en levert waarschijnlijk betere kwaliteit. Oh, die staat er ook nog ergens tussen zie ik.

[ Voor 27% gewijzigd door AtleX op 29-10-2007 08:24 ]

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • Griffin
  • Registratie: Maart 2003
  • Laatst online: 18-09 07:59

Griffin

Is mythical

Topicstarter
offtopic:
tis allemaal vast niet zo netjes, maar zoals ik al zei is het nu nog overal wat van geleerd wat ik gelezen heb.
Ook ben ik niet zo super in php, ken maar de basics.


Wat betreft WAMP server deel, ja het is wamp.

Ik denk ik ga even weer lokaal proberen aangezien ik de laatste wijzigingen alleen geprobeerd had op de ONLINE server, en daar doet de resizer het wel, maar nu dus niet online.

Heb net even de code in mijn topicstart geupdate.
Omdat mn code nu wel lokaal draaid zag ik dat de resizer niet goed werkte. nu even geupdate

[ Voor 13% gewijzigd door Griffin op 28-10-2007 19:51 ]


Acties:
  • 0 Henk 'm!

  • flashin
  • Registratie: Augustus 2002
  • Laatst online: 17-12-2023
Dit is gewoon een rechtenprobleem. Heeft m.i. niet veel te maken met je code.

Oplossen -> goede CHMOD, brakke serverconfig
PHP:
1
return str_replace(DIRECTORY_SEPARATOR, "/", $thumb_dir . $thumb_name);
als je met zoiets werkt, dan define() je het allereerst.
Daarnaast is DIRECTORY_SEPARATOR volgens mij predefined en hoef je dus niet aan te geven via die str_replace();

Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Ik gok dat die str_replace() meer is voor hetomdraaien van Windows directory separators (\) naar Unix separators (/) voor gebruik in een URL.

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • Griffin
  • Registratie: Maart 2003
  • Laatst online: 18-09 07:59

Griffin

Is mythical

Topicstarter
Yep dat is het.
Ik stuur de URL terug van de thumb. maar ik gebruik windows server nu en dat zijn dus \ (zoals atlex zegt) en het moeten URL / slashes zijn.

Maar het is dus niet mijn serverconfig, degene van wie ik het even mag gebruiken geeft aan dat ik full CHMOD777 heb (mijn user dus), en op de mappen staan ook CHMOD777.
Pagina: 1