Da ich mich umfangreich mit dem Problem beschäftigt habe und eine perfekte Lösung erarbeitet hab möchte ich die Funktion dazu und die Erklärung hier mal rein setzen.
Nutzt man in PHP die Standard Funktion "mkdir" um ein Verzeichnis anzulegen so wird der Ordner dem User gehören, unter dem der Apache und das PHP Modul läuft. Das führt zu Problemen wenn der VHost hingegen einen anderen User hat und man z.B. mit aktiven safemode arbeitet. In PHP gibt es dazu auch keine Lösung da man in PHP nicht die Berechtigung hat um direkt auf dem Server irgendwas zu machen.
Hier die funktion welche dieses Problem löst.
|
PHP Source code
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
function mkdir_vhostuser($ftp_server, $ftp_user_name, $ftp_user_pass, $pathcorrection, $folder, $permission)
{
$fullpath = $dpathcorrection.$folder;
$chmodcommand = "CHMOD ".$permission." ".$fullpath;
$connection_id = ftp_connect($ftp_server) or die("Verbindung fehlgeschlagen");
$login_result = ftp_login($connection_id, $ftp_user_name, $ftp_user_pass) or die("Login fehlgeschlagen");
if(ftp_mkdir($connection_id, $fullpath))
{
ftp_site($connection_id, $chmodcommand);
ftp_close($connection_id);
return true;
} else
{
ftp_close($connection_id);
return false;
}
}
|
Der Aufruf irgendwo in einem PHP Skript sieht dann wie folgt aus.
|
PHP Source code
|
1
2
3
4
5
6
7
8
|
$folder = "MeinVerzeichnis/";
$subfolder_from_ftp_home = "/test/bla/blub/";
$ftp_server = "meinftpserver.de";
$ftp_user_name = "FTP-Benutzer";
$ftp_user_pass = "FTP-Passwort";
$permission = "0777";
mkdir_vhostuser($ftp_server, $ftp_user_name, $ftp_user_pass, $subfolder_from_ftp_home, $folder, $permission);
|
Hier die Erklärung dazu.
$folder ist das Verzeichnis welches wir anlegen möchten. Wichtig ist der Slash am Ende des Ordnernamens.
$subfolder_from_ftp_home ist der Unterordner in welchem wir den neuen ordner erstellen möchten. Hier ist auch der beginnende und abschließende Slash wichtig.
$ftp_server, $ftp_user_name und $ftp_user_pass sollten klar sein wenn man schon mal mit einem FTP gearbeitet hat.
$permission ist das gleiche wie CHMOD im FTP oder in der Linux Console. Damit werden die Berechtigungen des Ordners gesetzt (0777 heißt alle dürfen lesen, schreiben, ausführen).
In der Funktion wird nun die FTP Verbindung aufgebaut. Hat dies funktioniert und man bekommt keine Fehlermeldung wird als nächstes das Verzeichnis erzeugt. Wenn dies funktioniert hat (kann fehlschlagen wenn der Ordner in welchem der neue Ordner angelegt werden soll einem anderen User gehört und man keine Berechtigung hat) wird im nächsten Schritt die Berechtigung gesetzt. Es gibt zwar zumindest in PHP5 das Kommando "ftp_chmod" aber da dies von etwas älteren PHP Versionen noch nicht unterstützt wird sende ich das Kommando mit "ftp_site" direkt an den FTP.
Die ganze funktion gibt true zurück bei Erfolg oder false bei Misserfolg.
Die Funktion kann man sich noch so umbauen, dass die Zugangsdaten zum FTP in einer config Datei liegen und nicht immer mit übergeben werden müssen. So bekommt man es hin, dass das Kommando für die Funktion genau so aussieht wie das originale PHP Kommando.
|
PHP Source code
|
1
|
mkdir_vhostuser($folder, $permission);
|
Verbesserungsvorschläge ruhig hier rein posten.