suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Berechtigung für Unterordner verweigert

Kontext

Frage

Ich versuche, eine Datei in einen bestimmten Ordner zu schreiben, aber es funktioniert nicht permission returned . Also habe ich die Berechtigungen überprüft und alles schien in Ordnung zu sein. Da es sich um eine Entwicklungsumgebung handelt, habe ich beschlossen, die Berechtigungen für den „Root“-Ordner, der alle Dateien schreibt, in „Jeder kann alles tun“ zu ändern. Ich habe versucht, alle unten aufgeführten Berechtigungen zu ersetzen. Ich versuche, geerbte Berechtigungen zu entfernen. Es kann nichts getan werden.

Dann habe ich versucht, eine Datei in den „Root“-Ordner zu schreiben. Es funktionierte. Bei Unterordnern hat es funktioniert. auf Unter-Unterordnern. effizient. Es gibt einen Punkt in der Unterordnerkette, an dem es nicht funktioniert, aber vor dem eigentlichen Unterordner.

Dies ist die Pfadhierarchie zum Zeitpunkt des Absturzes.

$f = new \wee\common\IO\File();
$f->write("DRIVE:/BASE_PATH/files/-/00.jpg", "hello"); // WORKS
$f->write("DRIVE:/BASE_PATH/files/-/mod/00.jpg", "hello"); // WORKS
$f->write("DRIVE:/BASE_PATH/files/-/mod/com.ci.company/00.jpg", "hello"); // WORKS
$pathLength = strlen("DRIVE:/BASE_PATH/files/-/mod/com.ci.company/site/00.jpg"); // Real path length is 85
$f->write("DRIVE:/BASE_PATH/files/-/mod/com.ci.company/site/00.jpg", "hello"); // FAILS
$f->write("DRIVE:/BASE_PATH/files/-/mod/com.ci.company/site/WorkersManager/00.jpg", "hello");
$f->write("DRIVE:/BASE_PATH/files/-/mod/com.ci.company/site/WorkersManager/workers/00.jpg", "hello");

Klasse weecommonIOFile wurde von mir erstellt, kann aber an vielen anderen Orten verwendet werden.

Die genaue Fehlermeldung, die ich erhalten habe, war:

fopen(DRIVE:/BASE_PATH/files/-/mod/com.ci.company/site/00.jpg):无法打开流:权限被拒绝

Hundertprozentig klar: Der „Root“-Ordner ist DRIVE:/BASE_PATH/files/

Bearbeiten #1

Hier ist die Umsetzung der File类的write-Methode.

public function write($fileName, $data, $lock = false) {
    $this->_write($fileName, $data, $lock);
}

private function _write($fileName, $data, $lock = false, $openMode = 'w') {
    if ($data === null)
        $data = "";
    
    $fh = fopen($fileName, $openMode) or die("can't open file"); // FAILS HERE
    if ($lock) {
        flock($fh, LOCK_EX);
    }
    fwrite($fh, (is_array($data) ? join("\n", $data) : $data));
    if ($lock) {
        fflush($fh);
        flock($fh, LOCK_UN);
    }
    fclose($fh);
}

P粉334721359P粉334721359244 Tage vor333

Antworte allen(1)Ich werde antworten

  • P粉819533564

    P粉8195335642024-03-28 12:07:19

    该问题来自 PHP 5.6.26。使用 PHP 5.6.40 修复了这个问题。

    我重置为原来的权限,一切都很好!

    Antwort
    0
  • StornierenAntwort