[PHP] fopen acces denied chmod 777!!

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

Onderwerpen


Acties:
  • 0 Henk 'm!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 17-09 15:08
Ik probeer het volgende te doen in php:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php 
echo "<TABLE>";
echo "<TR><TH>Bestandsnaam</TH><TH>Inhoud</TH></TR>";
$count = 0;
$handle=opendir('/var/spool/mmsmtp/quarantine'); 
while (false!==($file = readdir($handle))) { 
    if ($file != "." && $file != "..") {
    if(strstr($file,"qrt.")) { 
        echo "<TR><TD><A HREF=\"delete.php?file=$file\">$file</A></TD>";
        $filenaam = "/var/spool/mmsmtp/quarantine/$file";
        $fp = fopen ("$filenaam", "r");
        $inhoud = fgets($fp);
        echo "<TD>$inhoud</TD></TR>\n";
        $count++;
    } else { 
    }
     } 
}
closedir($handle);
echo "</TABLE>";
echo $count;
?>


Alleen krijg ik een error op fopen, hij zegt dat de permissie is gedenied terwijl ik alle directory's en files op 777 heb gechmod!!
Wat kan het probleem zijn?

Hail to the king baby!


Acties:
  • 0 Henk 'm!

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 18-09 19:05
Ten eerste is fopen ($filename, "r"); al voldoende (filename is een string).
Dan weet ik ook niet of je filename wel klopt. Die $file zal wel binnen komen via GET of POST, maar waar je die vandaan haalt?? (sticky kan ik niet vinden over gebruik van $_GET en $_POST in PHP 4.1 en hoger ofzo).

Vul anders ipv "$filename" bij fopen gewoon "/var/spool/mmsmtp/quarantine/$file" in maar dan ipv $file de bestandsnaam. Zo weet je zeker dat het werkt.

Permissies kunnen het probleem niet zijn. 777 is overkill, je wilt tenslotte alleen lezen. Deze error krijg je ook als je een bestand wilt openen dat er niet is (dus path kan verkeerd zijn, bestandsnaam, etc.)

[ Voor 40% gewijzigd door Postman op 06-01-2003 16:25 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 08:51

Janoz

Moderator Devschuur®

!litemod

1. Alles maar lukraak op 777 chmodden is natuurlijk niet echt the way to go.
2. Voor lezen heb je geen schrijfrechten nodig

Waarschijnlijk wordt het je allemaal een stuk duidelijker waneer je wat standaard debug technieken toe gaat passen. Ff wat vars afdrukken enz enz.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 17-09 15:08
als je even door de code heen leest zie je dat $file vanuit een directory gelezen wordt!

Je eerste suggestie maakt niks uit!

Hail to the king baby!


Acties:
  • 0 Henk 'm!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 17-09 15:08
PHP:
1
2
3
4
$filenaam = "/var/spool/mmsmtp/quarantine/qrt.XXZZWhk8";
        $fp = fopen ($filenaam, "r");
        $inhoud = fgets($fp);
        echo "<TD>$inhoud</TD></TR>\n";


Heb even een bestandsnaam erin gezet en dan krijg ik geen foutmelding meer, alleen leest hij niks! De inhoud van zo'n bestand ziet er als volgt uit:

code:
1
2
3
4
5
6
7
<quarantine>
<job path="/var/spool/mmsmtp/quarantine/job.XXZO7JhN"></job>
<report>Delivery failure. 
MailMonitor was unable to deliver the message after max_send_try attempts. 
Message quarantined
</report>
</quarantine>


Misschien zit hier wat in?

Hail to the king baby!


Acties:
  • 0 Henk 'm!

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 18-09 19:05
urk_forever schreef op 06 January 2003 @ 16:27:
als je even door de code heen leest zie je dat $file vanuit een directory gelezen wordt!
Ben geen code debugger! Door al die kleuren hier kan ik moeilijk native functions van variabelen onderscheiden.

Klopt je hele path wel?? Volledige path is nodig, of je moet vanuit dirs zelf gaan werken (is trouwens ook te proberen). Verder denk ik dat het misschien ergens anders aan ligt, maar dat moet ik eerst ff testen.

Dat je bestand leeg is kan wel kloppen. Als je lager dan 4.2 gebruikt dan moet je een tweede argument meegeven bij fgets (namelijk het te lezen aantal bytes).

En waarom je geen fread gebruikt zou ik zo niet weten. Zal wel een reden voor zijn, maar zo 1-2-3 lijken de 2 me bijna identiek (behalve dat fgets stopt als ie een EOF tegen komt).

[ Voor 26% gewijzigd door Postman op 06-01-2003 16:39 ]


Acties:
  • 0 Henk 'm!

  • igmar
  • Registratie: April 2000
  • Laatst online: 03-09 22:58

igmar

ISO20022

urk_forever schreef op 06 January 2003 @ 16:08:
Ik probeer het volgende te doen in php:

Alleen krijg ik een error op fopen, hij zegt dat de permissie is gedenied terwijl ik alle directory's en files op 777 heb gechmod!!
Wat kan het probleem zijn?
Gewoon een permissieprobleem. een su naar de apache user, en dan kijken of je de files kan openen.

Acties:
  • 0 Henk 'm!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 17-09 15:08
fread() werkt wel!! :?

Hail to the king baby!


Acties:
  • 0 Henk 'm!

Verwijderd

Laat me raden :?

Niet voldoende rechten op de dir zelf :+

Acties:
  • 0 Henk 'm!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 17-09 15:08
hmmm, chmod 777 zou toch genoeg moeten zijn?

Hail to the king baby!


Acties:
  • 0 Henk 'm!

Verwijderd

urk_forever schreef op 06 January 2003 @ 17:02:
hmmm, chmod 777 zou toch genoeg moeten zijn?

Buiten dat het niet echt intelligent is wel ja.

Acties:
  • 0 Henk 'm!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 17-09 15:08
:)

Hail to the king baby!


Acties:
  • 0 Henk 'm!

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 07-11-2023

kvdveer

Z.O.Z.

Techposts nodig of zo?

3-Stappenplan:
1. Su naar de apacheuser. Kijk of je het bestand kan catten. (ja? dan heb je dus geen permissie probleem)
2. Een XML-tag in een HTML-pagina wordt standaard niet weergegeven door een browser. Gebruik dus HTMLSPECIALCHARS() als je een variabele debugt.
3. Probeer te begrijpen dat het niet ons probleem is, en dat het ook niet onze taak is om jou scriptje te debuggen. Een beetje basis debugactiviteiten mag je wel tentoonspreiden.
4. Lees een unix manual over permissionbits. Probeer te begrijpen hoe ontiegelijk dom je bezig bent door 777 te chmodden voor een bestand wat je wilt LEZEN.

Localhost, sweet localhost


Acties:
  • 0 Henk 'm!

  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 05:31
ps -aux | grep httpd

Dan vind je de user waaronder apache draait, vervolgens doe je:

chmod -R APACHEUSER:APACHEGROUP /var/spool/mmsmtp/quarantine
of iets dergelijks....

[ Voor 5% gewijzigd door maartenvdv737 op 06-01-2003 19:28 ]

Ik blijf er iig vrij nuchter onder....


Acties:
  • 0 Henk 'm!

  • Postman
  • Registratie: Februari 2000
  • Laatst online: 18-09 19:05
Vindt fgets ook maar een rare functie. Doet exact hetzelfde als fread. Tevens staat er in de manual dat fgets pas vanaf 4.3.0 binary safe is 8)7

Nogmaals: dit is geen rechten probleem. Deze error kun je ook onder Windows krijgen of zelfs als je onder Linux als root Apache draait. Schijnbaar hebben ze bij PHP geen aparte error geschreven die onderscheidt maakt tussen het niet bestaan van een bestand en het niet kunnen openen ervan.

[ Voor 35% gewijzigd door Postman op 06-01-2003 19:34 ]


Acties:
  • 0 Henk 'm!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 17-09 15:08
kvdveer schreef op 06 January 2003 @ 17:37:
[...]


Techposts nodig of zo?

3-Stappenplan:
1. Su naar de apacheuser. Kijk of je het bestand kan catten. (ja? dan heb je dus geen permissie probleem)
2. Een XML-tag in een HTML-pagina wordt standaard niet weergegeven door een browser. Gebruik dus HTMLSPECIALCHARS() als je een variabele debugt.
3. Probeer te begrijpen dat het niet ons probleem is, en dat het ook niet onze taak is om jou scriptje te debuggen. Een beetje basis debugactiviteiten mag je wel tentoonspreiden.
4. Lees een unix manual over permissionbits. Probeer te begrijpen hoe ontiegelijk dom je bezig bent door 777 te chmodden voor een bestand wat je wilt LEZEN.
Aantal postings 973, nee dus!

Mijn Apache draait onder de User nobody

Heb de directory al gechown naar nobody met nogroup. Daarna chmod 644 op de directory en ook op de bestanden krijg ik de volgende foutmelding:

code:
1
2
3
Warning: fopen("/var/spool/mmsmtp/quarantine/qrt.XXZIRx6r", "r") - Permission denied in /usr/local/apache/htdocs/test/index.php on line 18

Warning: fread(): supplied argument is not a valid File-Handle resource in /usr/local/apache/htdocs/test/index.php on line 20


Ik moet de directory en de bestanden chmodden op 744 anders werkt het niet.

[ Voor 2% gewijzigd door urk_forever op 07-01-2003 12:01 . Reden: Solly :) ]

Hail to the king baby!


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 08:51

Janoz

Moderator Devschuur®

!litemod

Mensen proberen je hier te helpen. Misschien een id om ze niet zo af te bekken?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 17-09 15:08
Ik bek niemand af, hij vroeg of ik misschien tech-posts nodig had, nou niet dus. Meer wil ik hier niet mee zeggen.
Als het beledigend overkomt wil ik het wel verwijderen.

Hail to the king baby!


Acties:
  • 0 Henk 'm!

  • CyeZ
  • Registratie: September 2001
  • Laatst online: 10-09 03:41

CyeZ

Vroem vroem!!!

Door de vele uitroeptekens achter je zinnen komt het inderdaad een beetje schreeuwerig over. Niet beledigend, maar wel schrewerig. Als dat niet de bedoeling was van de post is het handig om een paar uitroeptekens weg te halen ;).

[18:54] <Prammenhanger> |HunterPro|eet
[18:55] <Prammenhanger> lijkt best op
[18:55] <Prammenhanger> |HunterProFeet


Acties:
  • 0 Henk 'm!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 17-09 15:08
nou ik heb het werken. Heb alleen een ander probleempje. Ik probeer via php een proces te stoppen/starten. Dit proces moet als root gestart worden. Hiervoor gebruik ik sudo.
Als ik inlog(telnet) als de gebruiker van apache en dan sudo gebruik om het proces te stoppen/starten dan gaat alles goed. Alleen als ik exec() of passthru() gebruik op de php pagina dan gebeurt er niks!
Als ik andere commando's gebruik werkt het wel!
Als ik bv
code:
1
passhtru(ping -c 4 www.tweakers.net);
gebruik krijg ik netjes de ouput hiervan terug. Maar als ik
code:
1
passthru(sudo ping -c 4 www.tweakers.net);
gebruik krijg ik niks terug! Weet iemand waarom dit is?

[ Voor 3% gewijzigd door urk_forever op 08-01-2003 11:42 ]

Hail to the king baby!

Pagina: 1