SAFE MODE
Matze
- php
0 dedlfix
Hallo!
Ich arbeite gerade an einem Script zum Bildupload und jetzt kommt mir dieses SAFE MODE in die Quere.
Genau genommen erstelle ich zuerst ein Verzeichniss:
if(!opendir("../pics")){
$verz = "../pics/";
$createverz = mkdir($verz, 0777);}
Dadurch ist beim Aufruf des Scriptes sichergestellt, dass das Verzeichniss für die Bilder existiert.
Jetzt kommt ein Formular mit Datum, Beschreibung, Bild (previewfile) und die anschließende Überprüfung nach Fehleingaben und ob die Datei das richtige Format, Maße etc. hat.
Die Angaben bekomme ich aus:
$size = getimagesize($_FILES[previewfile][tmp_name]);
Wenn die Überprüfung überstanden ist, erstelle ich noch ein Verzeichniss
mit dem Datum und versuche die Datei dorthin zu verschieben. Das sollte so funktionieren:
$datum = $_POST[datum];
$verz = "../pics/".$datum."/";
mkdir($verz, 0777);
chmod($verz, 0777); if(move_uploaded_file($_FILES[previewfile][tmp_name],$verz."firstpreview.jpg")) echo "Es funktioniert";}
Funktioniert aber nicht. Ich bekomme folgenden Fehler:
Warning: move_uploaded_file(): SAFE MODE Restriction in effect. The script whose uid is 650 is not allowed to access /var/www/****/html/pics/20070207 owned by uid 33 in /var/www/****/html/fotos.php on line 105
Jene Zeile 105 ist die mit move_uploaded_file().
Jetzt habe ich folgende Fragen.
Das Verzeichniss "pics" kann ich ganz am Ende ohne Probleme mit mkdir(Ordnername, 0777) erstellen. Bei dem Verzeichniss zum Bild muss ich den chmod noch extra mit chmod(Ordnername, 0777) setzen. Der chmod von mkdir() wird da einfach nicht angewendet bzw. auf 755 (glaub ich - oder 750?) gesetzt. Wieso ist das so?
Die nächste Frage wär dann schon zum SAFE MODE.
Wenn ich die Datei nur in das Verzeichniss "pics" schieben will geht das ohne Probleme, in das Unterverzeichniss allerdings nicht. Ich kann das Verzeichniss $verz = "../pics/".$datum; erstellen aber die Datei nicht hinein schieben obwohl es auf dem gleichen Weg erstellt wurde und die selben Rechte besitzt wie das Übergeordnete Verzeichniss wo es funktioniert. Kann mir das bitte jemand erklären?
Wie finde ich einen Ausweg aus dieser "Zwickmühle"?
Ich wäre euch dankbar wenn ihr mir einen Ansatz liefern könntet.
Grüße, Matze
echo $begrüßung;
Warning: move_uploaded_file(): SAFE MODE Restriction in effect. The script whose uid is 650 is not allowed to access /var/www/****/html/pics/20070207 owned by uid 33 in /var/www/****/html/fotos.php on line 105
Das Verzeichniss "pics" kann ich ganz am Ende ohne Probleme mit mkdir(Ordnername, 0777) erstellen. Bei dem Verzeichniss zum Bild muss ich den chmod noch extra mit chmod(Ordnername, 0777) setzen. Der chmod von mkdir() wird da einfach nicht angewendet bzw. auf 755 (glaub ich - oder 750?) gesetzt. Wieso ist das so?
Das Handbuch zu mkdir() weiß zu berichten, dass die umask dabei eine Rolle spielt.
Die nächste Frage wär dann schon zum SAFE MODE.
Wenn ich die Datei nur in das Verzeichniss "pics" schieben will geht das ohne Probleme, in das Unterverzeichniss allerdings nicht. Ich kann das Verzeichniss $verz = "../pics/".$datum; erstellen aber die Datei nicht hinein schieben obwohl es auf dem gleichen Weg erstellt wurde und die selben Rechte besitzt wie das Übergeordnete Verzeichniss wo es funktioniert. Kann mir das bitte jemand erklären?
Das ist ein Feature des Safe-Modes. Die Fehlermeldung sagt schon alles aus. Das Script, das von dir als User 650 hochgeladen wurden und damit diesem gehört darf nicht auf das Verzeichnis zugreifen, das den Benutzer 33 (das wird der Apache sein) gehört, denn dieser hat es angelegt.
Wie finde ich einen Ausweg aus dieser "Zwickmühle"?
Wie so viele andere vor dir auch: Wechsle den Provider, warte auf PHP 6, verwende ein Upload-Script. Details dazu dürftest du zur Genüge finden, wenn du mach der Fehlermeldung (ohne die konkrete uid und den Verzeichnisnamen) eine Suchmaschine befragst, z.B. das hiesige Archiv.
echo "$verabschiedung $name";
Hallo!
Reicht es also das Verzeichniss mit ftp_mkdir() zu erstellen?
Grüße, Matze
echo $begrüßung;
Reicht es also das Verzeichniss mit ftp_mkdir() zu erstellen?
Ich weiß es nicht, da ich vom Safe Mode nicht betroffen bin. Aber funktionierende Vorgehensweisen solltest du relativ einfach im Netz finden. Zum Beispiel Toms Beschreibung zum Safe Mode: Wie funktioniert der Safe Mode?
echo "$verabschiedung $name";
Hallo!
Wenn ich das richtig verstanden habe, muss ich das Verzeichniss "pics" per FTP erstellen. Jetzt versuche ich mit ftp_mkdir() das Verzeichniss $datum zu erstellen, aber ich bekomme immer die Fehlermeldung "No such file or directory in...".
Ich kriegs irgendwie nicht hin.
Ich kann also mit mkdir() ein Verzeichniss erstellen, mit ftp_mkdir() krieg ichs nicht hin, und krieg die Datei auch hoch, nur die Datei in das Verzeichniss geht irgendwie nicht :-(
Ich steh ganz schön auf dem Schlauch.
Grüße, Matze
Hallo!
Ich habe das Problem jetzt so gelöst:
Zuerst wechsel ich mit ftp_chdir() in das gewünschte Verzeichnis.
Dort erstelle ich dann mit ftp_mkdir() das Verzeichnis "../pics/"
und gebe ihm mit ftp_site() chomod 0777.
Das Unterverzeichnis wird genauso erstellt.
Jetzt kann ich die Dateien problemlos mit move_uploaded_file() rein schieben. Das wars eigentlich schon.
PERL ist erlaubt, aber so gehts ja auch ;-)
Jetzt versuch ich noch mehrere Bilder gleichzeitig hochzuladen,
aber komme noch nicht so recht mit der Schleife bei der Abarbeitung klar.
Vielleicht hat dazu ja nochmal jemand einen Tipp?
Danke für die Hilfe!
Grüße, Matze
Lieber dedlfix,
Wie finde ich einen Ausweg aus dieser "Zwickmühle"?
Wie so viele andere vor dir auch: Wechsle den Provider [...]
oh, ja! Davon kann auch ich ein Lied singen. Ich habe sieben Monate lang meine Mindestvertragslaufzeit weiterbezahlt, da ich um dieses Problem und die Uneinsichtigkeit meines damaligen Providers nicht wusste. - Meinen Umzug habe ich nie bereut, und die sieben Monate habe ich unter Lehrgeld abgeschrieben, das ich aufgrund meiner Unwissenheit nuneinmal zahlen musste.
Liebe Grüße aus Ellwangen,
Felix Riesterer.
gudn tach!
Wie finde ich einen Ausweg aus dieser "Zwickmühle"?
Wie so viele andere vor dir auch: Wechsle den Provider, warte auf PHP 6, verwende ein Upload-Script. [...]
andere moeglichkeit: evtl. ist ja perl erlaubt.
prost
seth