Het probleem is als volgt:
Ik heb een website op een server staan waar safemode draait. De hoster is ook niet van plan daar iets aan te veranderen. Met safemode krijg je alleen toegang tot bestanden en mappen die hetzelfde uid hebben als het script. Als je echter met mkdir() een map aanmaakt heeft deze het uid van apache. Je krijgt de vreemde situatie dat je in een zojuist aangemaakte map geen schrijfrechten hebt. Ik heb al geprobeerd om de rechten gelijk op 0777 te zetten of de eigenaar te veranderen met chown(), maar steeds dezelfde error.
Op php.net wordt het probleem als volgt samengevat, er is alleen geen oplossing.
1. Safemode uitzetten (zo mogelijk alleen voor mijn gebruiker). Lijkt me een redelijk probleem om dit bij mijn hoster voor elkaar te krijgen.
2. PHP in CGI-modus draaien. Dit zal waarschijnlijk ook mijn hoster moeten regelen. Ik heb al ontdekt dat bij sommige hosters php bestanden hernoemd kunnen worden naar bestand.phpcgi, maar dit werkt in mijn situatie zoals verwacht niet.
3. Spoedige overstap op PHP6. Het hele probleem van safemode zal in PHP6 van de baan zijn. Probleem is dat PHP6 nog niet final is en mijn host nog PHP4 draait. Ik zie op korte termijn nog geen overstap naar PHP5, laat staan versie 6.
4. De benodigde mappen aanmaken via een ftp-verbinding naar localhost. Lijkt me een zeer ranzige oplossing, maar het probleem lijkt me dan wel opgelost. Het kan zijn dat mijn host de benodigde functies uitgezet heeft, maar dan schrijven we er wel een netwerksocket voor.
5. Het script waar we het over hebben via een ander script naar een bestand schrijven. De eigenaar is dan apache en de aangemaakte mappen zijn dat ook. Ik heb het nog niet getest, maar het is een mogelijk oplossing.
6. Overstappen op een andere host. Heb kort geleden weer het contract verlengd, dus op korte termijn gaat dit geld kosten. Bovendien is de site een tijdje uit de lucht. Niet ideaal dus.
Wat raden jullie me aan?
Ik heb een website op een server staan waar safemode draait. De hoster is ook niet van plan daar iets aan te veranderen. Met safemode krijg je alleen toegang tot bestanden en mappen die hetzelfde uid hebben als het script. Als je echter met mkdir() een map aanmaakt heeft deze het uid van apache. Je krijgt de vreemde situatie dat je in een zojuist aangemaakte map geen schrijfrechten hebt. Ik heb al geprobeerd om de rechten gelijk op 0777 te zetten of de eigenaar te veranderen met chown(), maar steeds dezelfde error.
code:
1
| Warning: mkdir() [function.mkdir]: SAFE MODE Restriction in effect. The script whose uid is 400 is not allowed to access /home/user/public_html/folder owned by uid 101 in /home/user/public_html/script.php on line 49 |
Op php.net wordt het probleem als volgt samengevat, er is alleen geen oplossing.
Het is voor mij onwerkbaar om geen mappen meer te kunnen aanmaken. Globaal zie ik een paar oplossingen:Beware that when in safe mode, mkdir creates folders with apache's UID, though the files you create in them are of your script's UID (usually the same as your FTP uid).
What this means is that if you create a folder, you won't be able to remove it, nor to remove any of the files you've created in it (because those operations require the UID to be the same).
Ideally mkdir should create the folder with the script's UID, but this has already been discussed and will not be fixed in the near future.
In the meantime, I would advice NOT to user mkdir in safe mode, as you may end up with folders you can't remove/use.
1. Safemode uitzetten (zo mogelijk alleen voor mijn gebruiker). Lijkt me een redelijk probleem om dit bij mijn hoster voor elkaar te krijgen.
2. PHP in CGI-modus draaien. Dit zal waarschijnlijk ook mijn hoster moeten regelen. Ik heb al ontdekt dat bij sommige hosters php bestanden hernoemd kunnen worden naar bestand.phpcgi, maar dit werkt in mijn situatie zoals verwacht niet.
3. Spoedige overstap op PHP6. Het hele probleem van safemode zal in PHP6 van de baan zijn. Probleem is dat PHP6 nog niet final is en mijn host nog PHP4 draait. Ik zie op korte termijn nog geen overstap naar PHP5, laat staan versie 6.
4. De benodigde mappen aanmaken via een ftp-verbinding naar localhost. Lijkt me een zeer ranzige oplossing, maar het probleem lijkt me dan wel opgelost. Het kan zijn dat mijn host de benodigde functies uitgezet heeft, maar dan schrijven we er wel een netwerksocket voor.
5. Het script waar we het over hebben via een ander script naar een bestand schrijven. De eigenaar is dan apache en de aangemaakte mappen zijn dat ook. Ik heb het nog niet getest, maar het is een mogelijk oplossing.
6. Overstappen op een andere host. Heb kort geleden weer het contract verlengd, dus op korte termijn gaat dit geld kosten. Bovendien is de site een tijdje uit de lucht. Niet ideaal dus.
Wat raden jullie me aan?