[Funktion] rename() Permission denied obwohl chmod auf 0777

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Funktion] rename() Permission denied obwohl chmod auf 0777

    Moin Leute...

    Also ich habe grad wieder ein bisschen rumgebastelt mit meinem Root und wollte nun den Inhalt meines alten Webspaces auf meinen root kopieren... geht dank wget recht fix und einfach...

    das problem ist nur das Leerzeichen in dateinamen und ordnern als "%20" gespeichert werden...

    So dachte ich mir: Machst ne php datei die diese Ordner und dateien und ordner unter korrigiertem namen kopiert...

    soweit so gut... php script geschrieben... Dieses Script liest Ordner Struktur aus und soll den Namen des Files/Ordners per str_replace korrigieren... und dann in einem neuen Ordner unter selber struktur abspeichern...

    mein Code dafür:

    PHP-Code:
    <?php
    function read_dir($dir) {
        
    $path opendir($dir);
        
    $order='';
        while (
    false !== ($file readdir($path))) {
            if(
    $file!="." && $file!=".." && $file!="read.php" && $file!="tmp") {
                if(
    is_file($dir."/".$file)){
                    
    $files[]=$file;
                } else {
                    
    $dirs[]=$dir."/".$file;
                }
            }
        }
        if(
    $dirs) {
            
    natcasesort($dirs);
            foreach(
    $dirs as $fdir) {
                
    read_dir($fdir);
            }
        }
        if(
    $files) {
            
    natcasesort($files);
            foreach (
    $files as $file) {
                
    $dire str_replace('./','',$dir);
                
    $dire str_replace('%20',' ',$dire);
                if(!
    is_dir('./tmp/'.$dire)) {
                    if(
    mkdir('./tmp/'.$dire,0777)) {
                        echo 
    $dire.' erstellt<br>';
                    } else {
                        echo 
    $dire.' nicht erstellt<br>';
                    }
                }
                
    chmod('./tmp/'.$dire,0777);
                
    $temp $dir.'/'.$file;
                
    $old_name $temp;
                
    $new_name str_replace('%20',' ',$temp);
                
    $new_name str_replace('./','',$new_name);
                if(
    rename($old_name,'./tmp/'.$new_name)) {
                    echo 
    $new_name.' kopiert<br>';
                } else {
                    echo 
    $new_name.' nicht kopiert<br><br>';
                }
            }
        }
        
    closedir($path);
    }

    $path=".";
    read_dir($path)
    ?>
    das Problem dadran ist nur folgende Fehlermeldung:
    Warning: rename(***,***): Permission denied in /srv/www/htdocs/*** on line 27
    und jetzt werden bestimmt wieder einige Schlaumeier kommen und behaupten das würde an den Datei-Rechten liegen... falsch...
    Dateirechte sind richtig gesetzt... selbst wenn ich die Dateirechte manuell per shell neu setze auf 0777 gehts nicht -.-

    vllt hat ja jemand von euch ne idee wodran es liegen könnte...
    Zuletzt geändert von The_Hara; 26.10.2007, 14:40.
    http://www.andre-kalisch.de

  • #2
    hast du schreib rechte auf /srv/www/htdocs ?
    "Nicht jeder Mensch kann und soll Programmieren[...]".

    Kommentar


    • #3
      wieso sollte ich schreibrechte auf dem absoluten Pfad setzen wenn ich im script nur den relativen Pfad anspreche?
      http://www.andre-kalisch.de

      Kommentar


      • #4
        ich glaube zumindest der ordner in dem die files liegen benötigt ebenfalls schreibrechte. zumindest isses bei fopen() und unlink() der fall...
        **********
        arkos
        **********

        Kommentar


        • #5
          @arkos: Für fopen() brauchst du Schreibrechte? Oder meinst du die Kombination aus fopen() und unlink()? Das wäre völlig banane, man löscht eine Datei nicht, wenn man selbst noch ein Handle drauf hat.

          @The_Hara: Die Rechteprüfung findet auf Dateisystemebene statt und macht keinen Unterschied zwischen relativen und absoluten Pfaden.

          Dass rename() Schreibrechte auf dem Ordner braucht, kann man nachvollziehen, wenn man sich vorstellt, dass zuerst die Zieldatei angelegt wird, mit dem Inhalt der Quelldatei gefüllt wird und dann wird die Quelldatei gelöscht.

          Kommentar


          • #6
            ok... habe nun die rechte neu gesetzt... trotzdem der nette kleine permission denied fehler
            http://www.andre-kalisch.de

            Kommentar


            • #7
              Original geschrieben von onemorenerd
              @arkos: Für fopen() brauchst du Schreibrechte? Oder meinst du die Kombination aus fopen() und unlink()? Das wäre völlig banane, man löscht eine Datei nicht, wenn man selbst noch ein Handle drauf hat.
              nein nein, keine sorge. meinte keine kombi

              fopen() .. da brauch selbst ich keine schreibrechte
              gebe zu, war an dieser stelle nicht das beste beispiel...
              **********
              arkos
              **********

              Kommentar

              Lädt...
              X