Toon posts:

[PHP] fopen/fwrite permission probleem

Pagina: 1
Acties:
  • 44 views sinds 30-01-2008

Verwijderd

Topicstarter
Ik heb wat problemen met een script dat een file mysql.inc.php moet aanmaken. Ik krijg onder andere de volgende foutmeldingen:

Warning: fopen(../mysql.inc.php): failed to open stream: Permission denied in /home/blabla/install.php on line 260

Warning: fwrite(): supplied argument is not a valid stream resource in /home/blabla/install.php on line 261

Warning: fwrite(): supplied argument is not a valid stream resource in /home/blabla/install.php on line 262

Warning: fwrite(): supplied argument is not a valid stream resource in /home/blabla/install.php on line 263

Warning: fwrite(): supplied argument is not a valid stream resource in /home/blabla/install.php on line 264

Warning: fwrite(): supplied argument is not a valid stream resource in /home/blabla/install.php on line 265

etc.etc.

Met google kom ik alleen op websites die dezelfde foutmeldingen geven en via php.net weet ik eigenlijk alleen dat het iets met rechten te maken heeft maar ik heb geen idee wat ik moet doen.....

  • Psychokiller
  • Registratie: Oktober 2001
  • Niet online
Staat vaak in de readme's dat je de directory moet CHMODden naar de juiste rechten.
Dit script moet een mysql.inc aanmaken in een map, dus moet de map waarin die moet worden aangemaakt schrijfrechten hebben.
Is via vrijwel ieder ftp programma wel te doen door rechtermuisknop op de map te doen en dan CHMOD te kiezen uit het menu ofzo.
Dan kiezen voor 777 tijdelijk, en dit terugzetten naar normale permissies na de installatie:)

Verwijderd

Dit is de foutmelding waar het om gaat:
code:
1
Warning: fopen(../mysql.inc.php): failed to open stream: Permission denied in /home/blabla/install.php on line 260


En het lijkt me toch echt vrij duidelijk. Hij kan het bestand mysql.inc.php niet aanmaken, omdat hij geen toegang krijgt.

Waarschijnlijk draait je apache onder een eigen username (vaak www of www-data). Die user moet je rechten geven zodanig dat hij dat mysql.inc.php bestandje kan aanmaken.

Verwijderd

Topicstarter
in install.php staat:

$chmodden = chmod("../mysql.inc.php", "0755")
or die ("<br>chmodden van het bestand mysql.inc.php is niet gelukt,....blabla

dus chmodden doet hij wel.....

Verwijderd

Topicstarter
en als ik met ftp chmod doe krijg ik:

226-Options: -a -l
226 16 matches total
site chmod 777 /www/test/mysql.inc.php
550 Could not change perms on /www/test/mysql.inc.php: Permission denied

edit: opnieuw geupload nu wel via ftp permissie gezet -> zelfde probleem

[ Voor 17% gewijzigd door Verwijderd op 05-07-2005 23:13 ]


Verwijderd

Verwijderd schreef op dinsdag 05 juli 2005 @ 23:08:
in install.php staat:

$chmodden = chmod("../mysql.inc.php", "0755")
or die ("<br>chmodden van het bestand mysql.inc.php is niet gelukt,....blabla

dus chmodden doet hij wel.....
Nou niet dus .. de foutmelding is toch helder?

Bij mij weten kun je zo'n 'or die' constructie helemaal niet toepassen bij chmod. Chmod retourneert gewoon een boolean.

Maak maar eens van die code:
PHP:
1
2
3
  if ( !chmod("../mysql.inc.php", "0755") ) 
    { die ("<br>chmodden van het bestand mysql.inc.php is niet gelukt,....blabla");
    }


Anyways, lost van bovenstaande (waar ik niet zeker van ben); heb je geen andere toegang dan FTP? Stond er niet al een mysql.inc.php ?

[ Voor 17% gewijzigd door Verwijderd op 05-07-2005 23:14 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Verwijderd schreef op dinsdag 05 juli 2005 @ 23:08:
in install.php staat:

$chmodden = chmod("../mysql.inc.php", "0755")
or die ("
chmodden van het bestand mysql.inc.php is niet gelukt,....blabla

dus chmodden doet hij wel.....
Haal die quotes om 0755 eens weg. Die 0 voor het getal geeft aan dat het een octal is, maar door er quotes omheen te zetten zou het best eens kunnen dat het gelezen wordt als het getal 755 (decimaal).

Verder: probeer eens wat relevante code te geven, want zo kunnen we helemaal niets met dit topic. Er zijn tientallen oorzaken te bedenken die jouw foutmelding kunnen opleveren. (Al hebben ze allemaal te maken met fout ingestelde rechten.)
Verwijderd schreef op dinsdag 05 juli 2005 @ 23:13:
Bij mij weten kun je zo'n 'or die' constructie helemaal niet toepassen bij chmod. Chmod retourneert gewoon een boolean.
Daarom is die constructie juist wel te gebruiken, AFAIK. :) Achter iedere functie die een boolean returnt, of iets dat te casten is naar een boolean, kun je een "or nogwat"-constructie bouwen in PHP. Al vind ik in dit specifieke geval jouw oplossing inderdaad wel mooier. :)

[ Voor 26% gewijzigd door NMe op 05-07-2005 23:15 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

-NMe- schreef op dinsdag 05 juli 2005 @ 23:14:
Haal die quotes om 0755 eens weg. Die 0 voor het getal geeft aan dat het een octal is, maar door er quotes omheen te zetten zou het best eens kunnen dat het gelezen wordt als het getal 755 (decimaal).
Dat zou inhouden dat hij octaal '1407' als waarde instelt, oftewel read/write/execute voor de owner, niets voor group members, read voor 'ohters' en een 'sticky bit'. Dat zou dus nog best wel eens een acceptabele verklaring kunnen zijn, potverdikkie :)
Daarom is die constructie juist wel te gebruiken, AFAIK. :) Achter iedere functie die een boolean returnt, of iets dat te casten is naar een boolean, kun je een "or nogwat"-constructie bouwen in PHP. Al vind ik in dit specifieke geval jouw oplossing inderdaad wel mooier. :)
Ah kijk, zo leer je nog eens wat :).

/me is geen PHP coder van origine en vind de hele 'or die' constructie maar smerig.

[ Voor 5% gewijzigd door Verwijderd op 05-07-2005 23:23 ]


Verwijderd

Topicstarter
Het is niet mijn eigen script maar iets dat kant en klaar out of de box zou moeten werken. Eea is natuurlijk getest en het lijtk me sterk dat er echte fouten in zitten, toch?

Ik heb inmiddels de chmod uit de php code verwijderd en zelf een (lege) file via ftp geupload en via ftp ge-chmod en dan blijkt het te werken.....

probleem is dat ik dan het hele script door moet want dit komt nog een paar keer meer voor. Is er een instelling die ik moet veranderen om dit correct te laten werken?

voor de mensen die graag wat meer code willen zien:
PHP:
1
2
3
4
5
6
7
8
9
10
$chmodden = chmod("../mysql.inc.php", "0755")
  or die ("<br>chmodden van het bestand mysql.inc.php is niet gelukt, controleer of de instellingen wel in het bestand zijn opgeslagen. Het chmodden via php op windows OS is niet mogelijk<form method=post action=\"install.php\"><br><input type=hidden name=stap value=\"6\"<br>\n<br><input type=submit name=\"terug\" value=\"Ga terug\">\n<input type=submit value=\"Ga verder\">\n"); */
$open = fopen ("../mysql.inc.php", "w+");
fwrite ($open, "<?\n");
fwrite ($open, "\$host = \"$host\";\n");
fwrite ($open, "\$database = \"$database\";\n");
fwrite ($open, "\$gebruiker = \"$gebruiker\";\n");
fwrite ($open, "\$wachtwoord = \"$mysqlpass\";\n");
fwrite ($open, "\$tabel = \"$fotoboektabel\";\n");
fwrite ($open, "\$comtabel = \"$commentaartabel\";\n");

[ Voor 14% gewijzigd door Verwijderd op 05-07-2005 23:28 ]


Verwijderd

Topicstarter
Verwijderd schreef op dinsdag 05 juli 2005 @ 23:23:
[...]


Dat zou inhouden dat hij octaal '1407' als waarde instelt, oftewel read/write/execute voor de owner, niets voor group members, read voor 'ohters' en een 'sticky bit'. Dat zou dus nog best wel eens een acceptabele verklaring kunnen zijn, potverdikkie :)
Als ik via ftp kijk wat er gebeurt lijkt hij de rechten naar 000 te veranderen.

Verwijderd

Als je code post, zou je dat dan tussen code tags willen zetten? In dit geval zelfs een PHP-code-tag?

dus:
[code=php]
hier mijn 1337 php code
[/code].

Je krijgt dan:
PHP:
1
hier mijn 1337 php code


In dit voorbeeld zie je dat niet echt, maar neem maar even van mij aan dat dat voor ons veel leesbaarder is ;)

Wat betreft je vraag.. heb je NME's suggestie geprobeerd? Mocht hij gelijk hebben, dan zou je met een search-and-replace alle "0775" kunnen vervangen door 0775.

Overigens.. welk OS draait de host?

[ Voor 3% gewijzigd door Verwijderd op 05-07-2005 23:26 ]


Verwijderd

Topicstarter
Dat 0755 veranderen in 755 geeft geen enkele verbetering.

OS, ik denk linux. Het draait bij een hoster (pcextreme.nl)

  • Suepahfly
  • Registratie: Juni 2001
  • Laatst online: 21-04 16:00
Bij pcextreme heb je ssh toegang, probeer een een chmod commando van de cli tegeven

Verwijderd

Topicstarter
ik heb overal in het script gewoon de chmod er uit gemieterd en zelf met ftp de rechten op 755 gezet. Ik ben er alleen 1 vergeten en die was voor een directory..... boehoe, ik krijg hem nu niet meer weg (met ftp) want de directory is niet leeg maar ik mag er ook niet meer inkijken.... (rechten staan op 000 nu)

  • Wacky
  • Registratie: Januari 2000
  • Laatst online: 28-04 21:25

Wacky

Dr. Lektroluv \o/

Probeer eens een chmod naar 777, misschien is er iets mis met de rechten die je zet en de rechten die je nodig hebt (verschil tussen SSH gebruiker, PHP en FTP gebruiker?) :)

Nu ook met Flickr account


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Verwijderd schreef op dinsdag 05 juli 2005 @ 23:25:
Als ik via ftp kijk wat er gebeurt lijkt hij de rechten naar 000 te veranderen.
Dat zeg ik, "0755" is niet hetzelfde als 0755, want "0755" wordt waarschijnlijk geconverteerd naar het decimale getal 755, terwijl 0755 een octaal getal is, dat niet gelijk is 755 in decimale notering. :)
Verwijderd schreef op dinsdag 05 juli 2005 @ 23:23:
Het is niet mijn eigen script maar iets dat kant en klaar out of de box zou moeten werken. Eea is natuurlijk getest en het lijtk me sterk dat er echte fouten in zitten, toch?
Sorry, maar in Programming & Webscripting geven we geen support op scripts van anderen. Je zou er beter aan doen om support te vragen bij de makers, zij het via mail, zij het via hun eigen supportfora. De makers van een bepaald script weten immers veel meer van hun eigen software dan wij. Hier gaat je topic in elk geval op slot. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Radiant had hier nog wat aan toe te voegen. :)
Hoi,

Even een opmerking over je slotje hier:
[rml]-NMe- in "[ PHP] fopen/fwrite permission probleem"[/rml]

Bij unix permissies worden altijd octalen gebruikt. 0755 is dus octaal
755 en 755 is dat ook. Die 0 is echter optioneel en wordt gebruikt
voor setuid (om scripts e.d. uit te voeren als de owner ipv de huidige
user). 4755 bijv. is de setuid bit voor owner, dus dan wordt het
script uitgevoerd door de owner.

radiant@Cepheus:~$ chmod 4755 test3; ls -l test3
-rwsr-xr-x 1 radiant radiant 0 2005-07-06 08:10 test3

en dit is dus hetzelfde:
radiant@Cepheus:~$ chmod 755 test3; ls -l test3
-rwxr-xr-x 1 radiant radiant 0 2005-07-06 08:10 test3
radiant@Cepheus:~$ chmod 0755 test3; ls -l test3
-rwxr-xr-x 1 radiant radiant 0 2005-07-06 08:10 test3

Gewoon even zodat je het weet ;)

Mvg,

Radiant

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1

Dit topic is gesloten.