Felix Riesterer: Rechte FTP-verträglich ändern LÖSUNG

Beitrag lesen

Lieber frankx,

Allerdings nur, wenn das Verzeichnis selbst Schreibrechte für Jedermann hat.

genau da liegt ja der Hase im Pfeffer!

Ps. Wieso packst Du ein "@" = Fehlerausgabe unterdrücken vor das chmod()?

Weil ich die Fehlermeldung hier wirklich nicht brauche. Ehrlich nicht.

Ich habe einmal mit umask hantiert und bis heute nicht so wirklich begriffen, was diese umask soll, aber sie ist der Schlüssel zur Lösung meines Problems. Folgender Code tut das, was ich will:

<?php  
  
// ZIP-Datei entpacken  
function unzip($dateiname) {  
    $dir = preg_replace('~[^/]+$~', '', $dateiname);  
    $oldumask = umask(0); // unerlässlich, wenn man 0777 auf Verzeichnisse setzen möchte  
  
    if (is_file($dateiname)) {  
        // ZIP unter Windows braucht absoluten Pfad zur Datei  
        $zip = zip_open(realpath($dateiname));  
  
        while ($zip_entry = zip_read($zip)) {  
            $entry = zip_entry_open($zip,$zip_entry);  
            $filename = zip_entry_name($zip_entry);  
            $target_dir = $dir.substr($filename, 0, strrpos($filename, '/'));  
            $filesize = zip_entry_filesize($zip_entry);  
  
            if (is_dir($target_dir) || mkdir($target_dir, 0777)) {  
                if ($filesize > 0) {  
                    $contents = zip_entry_read($zip_entry, $filesize);  
  
                    $handle = fopen($dir.$filename, 'wb+');  
                    fputs($handle,$contents);  
                    fclose($handle);  
                    @chmod($dir.$filename, 0666);  
                }  
            }  
        }  
    }  
  
    umask($oldumask); // alte umask wieder herstellen  
}  
  
unzip('./cms.zip');  
echo "<pre>Installation abgeschlossen.</pre>";  
  
?>

Liebe Grüße aus Ellwangen,

Felix Riesterer.

--
ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)