# Datei mit PHP erstellen, SAFE MODE, chown(), etc. Problem!



## Quests Sohn (6. April 2005)

Hallo Forum,

ja, ich habe nach meinem Problem gesucht und nein, ich habe wirklich keinen exakt passenden Thread gefunden:

*VORABINFO: * 
1. Ich habe keinen Zugriff auf die PHP.ini und bekomme auch keinen
2. Auf meinem virtuellen Server (liegt beim Provider) ist SAFE MODE aktiv

Ich versuche nun seit zwei Tagen folgendes Szenario umzusetzen:

- Eine Person "User" meldet sich auf meiner Website an. 
- Seine Daten wandern in eine DB. 
- Die ID des DB-Eintrags wird der Name einer Datei (zzgl. der Endung ".php"), also z. B. "123.php".
- Die Datei wird aus einer vorhandenen Original-Datei erstellt (geöffnet, geändert, geschlossen).
- Die neue Datei wird dann in den Ordner "ordner" auf dem gleichen Server kopiert.
- Die neue Datei enthält include-Befehle, also include($DOCUMENT_ROOT."/include/php/data/extras.php");
- Die neue Datei kann von jedem Besucher direkt aufgerufen werden.

Bis auf die Tatsache, dass der Aufruf der neuen Datei eine Fehlermeldung hervorruft, klappt alles wunderbar. Eintrag funktioniert, Datei wird erstellt und kopiert/verschoben. 
Die sicher allseite bekannte Fehlermeldeung lautet:

_Warning: main(): SAFE MODE Restriction in effect. The script whose uid is 33 is not allowed to access /home/www/.../home/include/php/data/extras.php owned by uid 834 in /home/www/.../home/anbieter/123.php on line 2_ 

*FRAGE: * Wie kann ich mit meinen Voraussetzungen mittels eines PHP-Skripts individuelle, "halb-statische" Seiten erstellen (also Seiten, die nicht komplett aus der DB generiert werden), die in der Lage sind, z. B. einen Header (header.php) zu includen


----------



## redX (6. April 2005)

Hier findest du mal eine Reihe von Befehlen, die nicht , wen safe mode aktiv ist.
http://manuals.phpforum.de/php/features.safe-mode.php

Jetzt kannst du das alles natürlich in eine DB schreiben und dann auslesen. Dann hast du das Halbstatisch .

Dann musst du auch nix includen.
Und das Zauberwort heisst dan auch Eval. Guggst du hier -> http://www.selfphp.net/selfphp/funktionsreferenz/sonstige_funktionen/eval.html

MFG
redX


----------



## Quests Sohn (6. April 2005)

Danke erstmal, redX.

Aber ich verstehe wohl nicht ganz, was Du meinst. 
1. Falls ich nichts includen will, muss ich ja die DB-Zugangsdaten in jede neue Datei statisch einsetzen (denn eine db-connect-Datei kann ich ja auch nicht includen). Was passiert dann in 200 Jahren, wenn 1.000.000 Dateien geändert werden müssen, weil sich die DB-Zugangsdaten geändert haben?

2. Das mit eval() scheint mir in meinem Fall nichts zu bringen.


*Ich möchte irgendwie* eine Datei erstellen können, die - auf welche Weise auch immer - einen Kopf- und einen Fußbereich dynamisch einbettet. Diesen Kopf- und Fußbereich möchte ich schließlich jederzeit ändern können, ohne dass ich jede Seite einzeln ändern muss.

*Zusätzlich* muss jede Seite eine ID haben, die der DB anzeigt, wessen Daten (Name, Homepage, etc.) sie auf der Seite anzeigt.

Gibt es keinen Trick, SAFE MODE zu umgehen, der neuen Datei einen anderen Dateieigentümer zuzuordnen (wird derzeit immer verboten "operation not permitted") oder sonst etwas


HILFE!


----------



## redX (6. April 2005)

Safe mode umgehen? Denke nicht, sonst währe es ja sinnlos 

Seiten Includen funktioniert schon. Auch wenn safe mode aktiv ist. Nur du wolltest eine PHP Dateil öffnen, den PHP Code abändern und dann wieder abspeichern oder? Das funktioniert nicht. 
Eine DB-Connect-php kannst du schon machen und diese dann auch inlcuden. 

Was meinst du mit Dynamisch? Wie dynamisch soll das sein? Auf jeder Seite einfach das gleich, und wenn du es 1x änderst sollte es überall ändern? Oder möchest du so etwas wie ein GB oder was auch immer in den Header/footer knallen? Beschreib mal dann kann ich vieleicht weiterhelfen 

MFG
redX


----------



## Quests Sohn (6. April 2005)

Das endgültige System kann man sich als Telefonbuch vorstellen:

Man meldet sich an, schreibt seinen Namen, Adresse, etc. in ein Formular. Die Daten werden in eine DB gelegt und parallel wird eine Datei erstellt/generiert/geschrieben. Die Originaldatei (von der jeweils einfach eine Kopie gemacht wird) sieht etwa so aus:

<?php $user = "000"; ?>
<?php include($DOCUMENT_ROOT."/include/php/kopf.php"); ?>
<table width="800"><tr><td><?php echo $user_name; ?></td></tr></table>
<?php include($DOCUMENT_ROOT."/include/php/fuss.php"); ?>

Die Datei "kopf.php" enthält sämtliche PHP-Befehle (includes, DB_Connect, etc.), Head-Infos, Metatags, den Body-Tag, einen HTML-Header, etc.
Die Datei "fuss.php" enthält einen HTML-Footer, den Body- und HTML-Endtag und den Schließbefehl für die DB.


----------



## weightwatcher (6. April 2005)

```
Warning: main(): SAFE MODE Restriction in effect. The script whose uid is 33 is not allowed to access /home/www/.../home/include/php/data/extras.php owned by uid 834 in /home/www/.../home/anbieter/123.php on line 2
```

Du hast die Falsche Rechte für die Datei.... 
834 ist ne andere Zahl als 33. Das Kannste mit deinem FTP Programm meist z.B. mit FlashFXP in der Chmod einstellungen für die Datei ändern. Auf manchen Server muss man das machen, hatte ich auch schon mal das Problem. Zu deinem Safemod Problem: Man kann den Safemod nicht umgehen, sonst könnten ihn die Provieder gleich weglassen ....


----------



## robaer1982 (6. April 2005)

Was ist es denn für ein server nur web oder ein root server


----------



## Quests Sohn (7. April 2005)

Die Frage verstehe ich nicht. Nur Web oder Root?
Also es gibt ein Root-Verzeichnis. 
Das wird wohl nicht das echte Root-Verzeichnis des physischen Servers sein, aber es ist das erste Verzeichnis (der Basis-Ordner), den ich bei meinem Provider angelegt habe.

Keine Ahnung, ob Du das meintest?!


----------



## robaer1982 (7. April 2005)

Ich wollte wissen ob es ein root-server ist, wenn nicht frage einfach mal bei den Provider nach meiner hatte es mir auch eingestellt 

mfg robaer1982


----------

