"Operation not permitted" bij upgeloade foto's

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sasa

sasa

06/02/2009 18:37:00
Quote Anchor link
Ik heb hier een mooi scriptje gevonden om foto's te verkleinen en up te loaden. Het werkt perfect, buiten dat "owner/group" "apache:apache" wordt, waardoor ik niet de juiste rechten heb.
Hier volgt het script:

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
<?
$newwidth
='500';
$newheight='500';
    $dir = "images/";
           $maxsize = 2900000; // maximum groote images
      
if (is_uploaded_file($_FILES['bestand']['tmp_name']))
 {

     if(filesize($_FILES['bestand']['tmp_name']) > $maxsize){
      
                echo "<span style=\"color: red\">!! Foto 1 is te groot.</span><p>";
      
                
            }
else {
  
$pathinfo = pathinfo($_FILES['bestand']['name']);
           $ext = strtolower($pathinfo["extension"]);
$a = ".$ext";
$naam= @foto_. date("dmyHis") .$a;

if ($ext == "jpeg" || $ext == "jpg" || $ext == "gif" || $ext == "png"){
  move_uploaded_file($_FILES['bestand']['tmp_name'], $dir.$naam) or die("Onze excuses, maar het kan niet uploaden.
Waarschijnlijk is uw foto te groot.<br>
<a onclick=\"javascript:history(-1);\">Ga Terug en probeer iets anders!</A> "
);
  



$pics=$dir.$naam;


     list($width, $height) = getimagesize($pics);
     if($width > $height && $newwidth < $width){
       $newheight = $height / ($width / $newwidth);
     }
else if ($width < $height && $newheight < $height) {
       $newwidth = $width / ($height / $newheight);    
     }
else {
       $newwidth = $width;
       $newheight = $height;
    }

    if(preg_match("/.jpg/i", "$pics")){
    $source = imagecreatefromjpeg($pics);
    }

    if(preg_match("/.jpeg/i", "$pics")){
    $source = Imagecreatefromjpeg($pics);
    }

    if(preg_match("/.png/i", "$pics")){
    $source = imagecreatefrompng($pics);
    }

    if(preg_match("/.gif/i", "$pics")){
    $source = imagecreatefromgif($pics);
    }


    $thumb1 = imagecreatetruecolor($newwidth, $newheight);
    imagecopyresampled($thumb1, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

 if(preg_match("/.jpg/i", "$pics")){
    imagejpeg($thumb1,$dir.$naam,90);
    }

     if(preg_match("/.jpeg/i", "$pics")){
    imagejpeg($thumb1,$dir.$naam,90);
    }

    if(preg_match("/.png/i", "$pics")){
    imagepng($thumb1,$dir.$naam,9);
    }

    if(preg_match("/.gif/i", "$pics")){
    imagegif($thumb1,$dir.$naam,90);
    }


$x=$newwidth;
$y=$newheight;

}

else {
echo "<span style=\"color: red\">Foute extensie van foto 1!! Afbeeldingen mogen enkel gif, jpg, jpeg of png zijn!</span>";
}
 }

}

?>


Alle foto's komen dus in de map images, die gechmod is naar 777. Het probleem is dat ik de foto's niet kan downen via filezilla, als ik bv. een backup wil maken. Ik heb deze foto's dan willen chmodden naar 777, maar dan krijg ik "Operation not permitted". Hoe kan ik dus de owner veranderen? Met chown, maar hoe juist?
 
PHP hulp

PHP hulp

20/11/2024 00:21:07
 
Jesper Diovo

Jesper Diovo

06/02/2009 20:17:00
Quote Anchor link
Ben je wel de eigenaar/administrator van de ftp?
 
Citroen Anoniem Graag

Citroen Anoniem Graag

06/02/2009 21:05:00
Quote Anchor link
Ik twijfel of regel 19 goed is:

$naam= @foto_. date("dmyHis") .$a;
 
Lode

Lode

06/02/2009 23:26:00
Quote Anchor link
kijk eens naar pathinfo(); en strtolower(); om een extensie te matchen.
preg_match is voor ingewikkelde patterns...

*EDIT*
Gebruik je eerder wel en later ga je met preg_ aan de slag...?
Waarom...

nog een EDIT
De maxsize bepaal jij niet... Dat doet de server met zijn instellingen.
zie ook mijn functie: http://www.phpfreakz.nl/forum.php?forum=1&iid=1135811#id1135828
Gewijzigd op 01/01/1970 01:00:00 door Lode
 
Sasa

sasa

07/02/2009 13:06:00
Quote Anchor link
Ik ben de eigenaar van de ftp, maar als er foto's upgeload worden dan ben ik daar niet meer de eigenaar van, ziehier:
http://thelivery.be/apache.png [screenshot van filezilla]
Normaal staat er altijd bij Owner mijn username.
Van maxsize, dat wist ik, maar anders krijg je een niet-gebruiksvriendelijke error als je te grote bestanden upload.

Lode, wat bedoel je juist met preg_? En denk je dat dat de file permissions kan beïnvloeden? Weet er anders iemand hoe ik manueel in filezilla de file permissions kan wijzigen? Bij server -> Enter custom command ->chmod... krijg ik:
Command: chmod 777 /httpdocs/images
Response: 500 CHMOD not understood
 
Onbekend Onbekend

Onbekend Onbekend

07/02/2009 13:09:00
Quote Anchor link
Waarom niet gewoon een SSH terminal en daarmee chmodden? En php heeft ook een functie daarvoor, voor unix-based systems: chmod()
 
Sasa

sasa

07/02/2009 13:41:00
Quote Anchor link
Tommy,
Onder $x=$newwidth; $y=$newheight; had ik dat al geprobeerd:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
chmod($dir.$naam, 0777);
?>


...Maar dat was natuurlijk fout, ik heb het nu in het midden gezet, zodat ik dit krijg:
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
<?
$newwidth
='500';
$newheight='500';
    $dir = "images/";
           $maxsize = 6000000; // maximum groote images
      
if (is_uploaded_file($_FILES['bestand']['tmp_name']))
 {

     if(filesize($_FILES['bestand']['tmp_name']) > $maxsize){
      
                echo "<span style=\"color: red\">!! Foto 1 is te groot.</span><p>";
      
                
            }
else {
  
$pathinfo = pathinfo($_FILES['bestand']['name']);
           $ext = strtolower($pathinfo["extension"]);
$a = ".$ext";
$naam= @foto_. date("dmyHis") .$a;

if ($ext == "jpeg" || $ext == "jpg" || $ext == "gif" || $ext == "png"){
  move_uploaded_file($_FILES['bestand']['tmp_name'], $dir.$naam) or die("Onze excuses, maar het kan niet uploaden.
Waarschijnlijk is uw foto te groot.<br>
<a onclick=\"javascript:history(-1);\">Ga Terug en probeer iets anders!</A> "
);
  


chmod($dir.$naam, 0777);
$pics=$dir.$naam;


     //...... verkleining enz.

$x=$newwidth;
$y=$newheight;

}


else {
echo "<span style=\"color: red\">Foute extensie van foto 1!! Afbeeldingen mogen enkel gif, jpg, jpeg of png zijn!</span>";
}
 }

}

?>


Nu worden de bestanden dus gechmod naar 777. Perfect!
Maar hoe kan ik nu nog de eerdere foto's, die nog niet 777 zijn, chmodden?
 
Onbekend Onbekend

Onbekend Onbekend

07/02/2009 14:45:00
Quote Anchor link
Je kunt die chmodden in je FTP client toch?
 
Sasa

sasa

07/02/2009 15:19:00
Quote Anchor link
Dat gaat juist niet... Als ik in filezilla rechterklik->File Permissions... en dan 777 zet, dan krijg ik:

Status: Set permissions of '/httpdocs/images/foto_270708155959.jpg' to '777'
Command: SITE CHMOD 777 foto_270708155959.jpg
Response: 550 CHMOD 777 foto_270708155959.jpg: Operation not permitted
 
Onbekend Onbekend

Onbekend Onbekend

07/02/2009 15:22:00
Quote Anchor link
Dan een PHP scriptje dat een dir opent en alle bestanden list en die dan één voor één chmodden.
 
Sasa

sasa

07/02/2009 15:33:00
Quote Anchor link
Bestaat er niets leuker :)
 
- SanThe -

- SanThe -

07/02/2009 15:50:00
Quote Anchor link
sasa schreef op 07.02.2009 15:33:
Bestaat er niets leuker :)

Ja hoor, maar dat heeft weer niks met php te maken. ;-)

Wat Tommy voorstelt is toch heel simpel te maken.
 
Sasa

sasa

08/02/2009 09:59:00
Quote Anchor link
OK, ik heb dit script gebruikt, en nu is mijn probleem opgelost!

Alvast erg bedankt allemaal!

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$curDir
= getcwd();
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($curDir));

foreach($iterator as $item) {
    chmod($item, 0777);
}


?>
 



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.