• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

ftp_mkdir dateiberechtigung setzen?

syuam

Neues Mitglied
hey leute, und zwar erstelle ich in einem Ordner(Hauptordner) ein Unterverzeichnis(Ordner_1). Dieser Ordner_1 soll die Dateiberechtigung 0777 haben :
PHP:
$ftpcon = "#";
$ftpbasedir = "#";
$ftpath = "#";
// function
function ftp_mksubdirs($ftpcon,$ftpbasedir,$ftpath){
    @ftp_chdir($ftpcon, $ftpbasedir); 
    $parts = explode('/',$ftpath); 
    foreach($parts as $part){
       if(!@ftp_chdir($ftpcon, $part)){
          ftp_mkdir($ftpcon, $part);
          ftp_chdir($ftpcon, $part);
       }
    }
 }
// usage

$ftpserver = "#";
$path_of_storage = "Hauptordner";
$newftpdir = "Ordner_1";
$login = "#";
$pass = "#";
$conn_id = ftp_connect($ftpserver);
ftp_login($conn_id, $login, $pass);
if(ftp_mksubdirs($conn_id,$path_of_storage,$newftpdir)) {
  if(ftp_chmod($ftpcon, 0777, $part)) {
    if(copy("pathToDir_1", "PathToDir_2")) {
 
 } else {
     echo "nicht kopiert";
 }
  } else {
     echo "nicht gesetzt";
  }
} else {
    echo "nicht erstellt";
}
ftp_close($conn_id);
Als Ausgabe bekomme ich : "nicht erstellt". Das Unterverzeichnis ist jedoch erstellt. Wieso also diese Meldung? Desweiteren: Die erstellte Datei bekommt nicht die Berechtigung: 0777, wieso?
 
Werbung:
ok hab es nun so:
PHP:
$ftpcon = "#";
$ftpbasedir = "#";
$ftpath = "#";
// function
function ftp_mksubdirs($ftpcon,$ftpbasedir,$ftpath){
    @ftp_chdir($ftpcon, $ftpbasedir); 
    $parts = explode('/',$ftpath); 
    foreach($parts as $part){
       if(!@ftp_chdir($ftpcon, $part)){
          ftp_mkdir($ftpcon, $part);
    ftp_chdir($ftpcon, $part);
       }
    }
 }
// usage
$ftpserver = "#";
$path_of_storage = "Oberordner";
$newftpdir = "Unterordner_1";
$login = "#";
$pass = "#";
$dateiname = "Oberordner/Unterordner_1";
$conn_id = ftp_connect($ftpserver);
ftp_login($conn_id, $login, $pass);
ftp_mksubdirs($conn_id,$path_of_storage,$newftpdir);
// Zugriffsrechte von $dateiname auf 777 ändern
if(ftp_chmod($conn_id, 0777, $dateiname) !== false) {
    echo "Zugriffsrechte der Datei $dateiname auf 777 geändert\n";
} else {
    echo "Änderung der Zugriffsrechte fehlgeschlagen\n";
}
ftp_close($conn_id);
Bei Ausführung dieses skriptes bekomme ich aber:
Warning: ftp_chmod(): Oberordner/Unterordner_1: No such file or directory in..
nun habe ich es doch wie im manual, wieso also die Fehlermeldung? PS: Das Unterverzeichnis wird erstellt, die Zugriffsrechte jedoch nicht. kann mir jmd weiterhelfen?
 
Werbung:
Hallo!
Bei Ausführung dieses skriptes bekomme ich aber:
Warning: ftp_chmod(): Oberordner/Unterordner_1: No such file or directory in..
Das bedeutet lediglich, dass ftp_chmod keinen chmod auf das angegebene "file" was ein verzeichnis ist ausführen kann, da es nicht existiert oder gefunden werden kann.

Probier doch das mal:
PHP:
$ftpcon = "#";
$ftpbasedir = "#";
$ftpath = "#";
// function
function ftp_mksubdirs($ftpcon, $ftpbasedir, $ftpath)
{
    @ftp_chdir($ftpcon, $ftpbasedir);
     $parts = explode('/',$ftpath);
     foreach($parts as $part)
    {
        if(!@ftp_chdir($ftpcon, $part))
        {
            ftp_mkdir($ftpcon, $part);

/*         Am besten passt du gleich die Rechte hier an, wenn das Verzeichnis angelegt wird und es noch keinen Verzeichniswechsel gab...
            ftp_chmod($conn_id, 0777, "$part");
*/
            ftp_chdir($ftpcon, $part);
       }
    }
 }
 
// usage
$ftpserver = "#";
$path_of_storage = "Oberordner";
$newftpdir = "Unterordner_1";
$login = "#";
$pass = "#";
$dateiname = "$path_of_storage/$newftpdir";

$conn_id = ftp_connect($ftpserver);
ftp_login($conn_id, $login, $pass);
ftp_mksubdirs($conn_id, $path_of_storage, $newftpdir);

// Zugriffsrechte von $dateiname auf 777 ändern
if(ftp_chmod($conn_id, 0777, "$dateiname") !== false)
{
    echo "Zugriffsrechte der Datei $dateiname auf 777 geändert\n";
}
else
{
    echo "Änderung der Zugriffsrechte fehlgeschlagen\n";
}
ftp_close($conn_id);
 
Wieso diese Meldungen, wenn doch alles super funktioniert hat? lg
Wenn, aber wirklich nur wenn, du endlich mal mitdenken und richtig debuggen würdest (was du bisher ja absolut verweigerst), dann könnte dir vielleicht etwas auffallen!!!
PHP:
<?php
error_reporting(E_ALL);
ini_set("display_errors", true);

// function
function ftp_mksubdirs($ftpcon, $ftpbasedir, $ftpath)
{
     @ftp_chdir($ftpcon, $ftpbasedir)
        or die ("Cannot change to directory $ftpbasedir");
     $parts = explode('/',$ftpath);
     foreach($parts as $part)
    {
        if(!@ftp_chdir($ftpcon, $part))
        {
            if (@ftp_mkdir($ftpcon, $part) !== false)
            {
                @ftp_chdir($ftpcon, $part)
                   or die ("Cannot change to directory $part");
            }
            else
              die ("Cannot create directory $part");
       }
       else
         die ("Cannot change to directory $part");
    }
 }
 
// usage
$ftpserver = "#";
$path_of_storage = "Oberordner";
$newftpdir = "Unterordner_1";
$login = "#";
$pass = "#";
$dateiname = "$path_of_storage/$newftpdir";

$conn_id = @ftp_connect($ftpserver)
   or die ("Connection failed");

echo "Connection ready<br>";
   
@ftp_login($conn_id, $login, $pass)
  or die ("Login failed");

echo "Login ok<br>";

ftp_mksubdirs($conn_id, $path_of_storage, $newftpdir);

echo "Current directory = " . ftp_pwd($conn_id) . "<br>";

// Zugriffsrechte von $dateiname auf 777 ändern
if(@ftp_chmod($conn_id, 0777, "$dateiname") !== false)
    echo "Zugriffsrechte der Datei $dateiname auf 777 geändert\n";
else
    echo "Änderung der Zugriffsrechte der Datei $dateiname fehlgeschlagen\n";

ftp_close($conn_id);  
?>
 
Werbung:
Wieso diese Meldungen, wenn doch alles super funktioniert hat?
Nimm doch einfach mal meinen Code her und kommentiere meinen ftp_chmod aus und kommentiere deinen ftp_chmod, sodass meiner wirksam und deiner unwirksam wird...

Danach gibt es nur noch einen ftp_chmod. Probiere es jetzt nochmal... Wenn du dann immer noch die Warnungen erhälst, würde ich halt mal debuggen...

Der nachfolgende Code sollte gut zum Debuggen sein, wenn ich keinen Fehler eingebaut habe:
PHP:
$ftpcon = "#";
$ftpbasedir = "#";
$ftpath = "#";

// function
function ftp_mksubdirs($ftpcon, $ftpbasedir, $ftpath)
{
    @ftp_chdir($ftpcon, $ftpbasedir);
    $parts = explode('/',$ftpath);

    foreach($parts as $part)
    {
        if(!@ftp_chdir($ftpcon, $part))
        {
            if(ftp_mkdir($ftpcon, $part))
            {
                if(ftp_chmod($conn_id, 0777, "$part"))
                {
                    if(ftp_chdir($ftpcon, $part))
                    {
                        return 1;
                    }
                    return 4;
                }
                return 3;
            }
            return 2;
        }
        return 0;
    }
}
 
// usage
$ftpserver = "#";
$path_of_storage = "Oberordner";
$newftpdir = "Unterordner_1";
$login = "#";
$pass = "#";
$dateiname = "$path_of_storage/$newftpdir";

$conn_id = ftp_connect($ftpserver);
ftp_login($conn_id, $login, $pass);

// ftp_mksubdirs($conn_id, $path_of_storage, $newftpdir);

if(ftp_mksubdirs($ftpcon, $ftpbasedir, $ftpath))
{
    echo "Das Verzeichnis wurde erfolgreich mit den angepassten Rechten 0777 angelegt!";
}
if(!ftp_mksubdirs($ftpcon, $ftpbasedir, $ftpath))
{
    echo "Das Verzeichnis existiert bereits!";
}
if(ftp_mksubdirs($ftpcon, $ftpbasedir, $ftpath) == 2)
{
    echo "Das Verzeichnis konnte nicht angelegt werden!";
}
if(ftp_mksubdirs($ftpcon, $ftpbasedir, $ftpath) == 3)
{
    echo "Die Verzeichnis-Rechte konnten nicht geändert werden!";
}
if(ftp_mksubdirs($ftpcon, $ftpbasedir, $ftpath) == 4)
{
    echo "Es konnte nicht in das neue Verzeichnis gewechselt werden!";
}
ftp_close($conn_id);
 
Zuletzt bearbeitet:
Das Script ist ja noch schlimmer! Warum wird denn da die Funktion ftp_mksubdirs 5x aufgerufen?
 
danke an bdt600, ich lerne langsam echt das schritt-für-schritt-debugging, es ist es etwas schwer bei mir aber ich lerne ja noch:) Nun werden alle Meldungen angezeigt: connection ok, login ok, current directory ok => das unterverzeichnis wurde erstellt, allerdings wurden die Dateiberechtigungen nicht auf 777 gesetzt:
Änderung der Zugriffsrechte der Datei Oberordner/Unterordner_1 fehlgeschlagen
Die Dateirechte des erstellten Verzeichnisses bleiben auf 755 :/ Hintergrund dieser Geschichte: Anschließend sollen verschiedene Dateien in dieses erstellte Unterverzeichnis kopiert werden und dafür brauche ich halt die entsprechenden Rechte, weißt du wie ich die Rechte anders setzen kann? lg
 
Werbung:
Boah, sieh' dir die Ausgaben nochmal genau an! Die Ausgabe von
PHP:
echo "Current directory = " . ftp_pwd($conn_id) . "<br>";
sollte dir klar machen, warum das nicht funktioniert!
 
Zurück
Oben