Sönke Tesch: fopen() in Safe Mode

Beitrag lesen

Ich habe folgendes Problem:
ich erzeuge ein neues Verzeichnis mit mkdir($i,0777);
dann will ich mit $fp=fopen("text","w"); eine datei darin erzeugen, allerdings läßt dies der safe mode des Servers nicht zu:

Warning: SAFE MODE Restriction in effect. The script whose uid is 4847 is not allowed to access /home/usr/clan-tss/news/25 owned by uid 30 in /home/usr/clan-tss/addnews.php on line 30

in dem verzeichnis, in dem ich das Verzeichnis erzeugen will hat natürlich chmod 777.

Das hat damit nichts zu tun. PHP läuft als Teil des Webservers und erzeugt Dateien und Verzeichnisse dementsprechend auch "im Namen" des Webservers (www, wwwrun oder wie immer er auf Deinem Server heißen mag). Das bedeutet, daß alle Benutzer dieses Webservers ihre Dateien unter dem gleichen Namen erzeugen und somit jeder Zugriff auf die Dateien aller anderen hat. Zugriffsrechte des Dateisystems haben deshalb auch absolut keine Wirkung.

Der Safe Mode von PHP versucht so gut es in dieser Situation eben geht, dem einen Riegel vorzuschieben, indem es vor Benutzung einer Datei oder sonstiger Objekte prüft, ob Eigentümer des Skriptes und Eigentümer der zu bearbeitenden Datei übereinstimmen.

Das erfüllt zwar seinen Zweck, hat allerdings den Nachteil, daß PHP auf Dateien, die PHP selbst erzeugt hat, anschließend nicht zugreifen kann: der Eigentümer der Datei ist halt der Webserver, nicht der des Skriptes.

Du wirst also nicht drumrum kommen, mit PHP keine Dateien zu erzeugen bzw. zu nutzende Dateien erst per FTP hochzuladen, damit Du auch Eigentümer dieser Dateien bist. Traurig, aber war.

Gruß,
  soenk.e

PS: Datei steht hier als Ersatz für "alle Objekte des Dateisystems".