983 Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von timoxy Mitglied (133 Punkte)
Hallo Leute ich hab ein Problem:

ich möchte auf meiner Seite für jeden User einen Ordner und Unterordner anlegen und darin dann Bilder und Thumbnails reinspeichern.

Da es ja etwas schwierig ist Ordner mit den Rechten 0777 anzulegen mach ich das ganze über eine FTP Funktion, welche den gleichen Server aufruft und die Ordner anlegt.

DIe Funktion:
// Verzeichniss mit 777 über FTP erstellen
function FtpMkdir($path, $newDir, $chmod=" 0777 ") {

$server='xxx';
$connection = ftp_connect($server);

$user = "xxx";
$pass = "xxx";
$result = ftp_login($connection, $user, $pass);
if ((!$connection) || (!$result)) {
return false;
exit();
}
else {
ftp_chdir($connection, $path);
if(ftp_mkdir($connection,$newDir)) {
if(!ftp_site($connection, "CHMOD ".$chmod." ".$newDir) ) {
return false;
}
return true;
}
else {
return false;
}
ftp_close($connection); // close connection
}
}


Die Stelle im Code, an welcher die Funktion ausgeführt, wird dies geschiet jedes mal vor einem Dateiupload.


//Verzeichniss anlegen
$kundenid=$_GET['id'];
$ver = 'httpdocs/pages/kay/bilder/'; //Pfad relativ zum FTP-Login!

if(!file_exists('bilder/'.$kundenid)) { //Pfad relativ zu dieser datei!
if(!FtpMkdir($ver, $kundenid)) {
$ergebnis = 7;
}
if(!file_exists('bilder/'.$kundenid.'/thumbs')) { //Pfad relativ zu dieser datei!
if(!FtpMkdir($ver.$kundenid.'/', 'thumbs')) {
$ergebnis = 7;
}
}
//else echo 'th existiert';
}
//else echo 'existiert';


Ok, also die Ordner werden angelegt, jedoch nicht mit den Rechten 777 an was kann das liegen? Auf einem anderen Server hat es vor einiger zeit schon funktioniert.

php.net sagt:
ftp_site() sendet das angegebene SITE-Kommando zum FTP-Server.

SITE-Kommandos sind nicht standardisiert und unterscheiden sich von Server zu Server. Sie sind nützlich, um Dinge wie Datei-Zugriffsrechte und Gruppen-Mitgliedschaften zu handhaben.


Kann mir jemand weiter helfen. Schön währe es, wenn es eine Lösung geben würde, welche auf allen Servern funktionieren würde.

LG Timoxy

1 Antwort

0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Drei Dinge:
1. Der Standardwert des Parameters $chmod deiner Funktion FtpMkDir() enthält bereits Leerzeichen - trotzdem fügst du bei der Verwendung in ftp_site() nochmals Leerzeichen an. Lass sie also an einer beider Stellen weg.

2. chmod ist bereits ein definierter Funktionsname in PHP - sowas kann schnell als Variablenfunktion missinterpretiert werden.

3. Verwende ftp_raw() statt ftp_site(), damit du siehst was falsch läuft:
$erg= ftp_raw( $connection, "CHMOD $chmod $newDir" ) );
print_r( $erg );
...