Berechtigung für Unterordner verweigert
P粉334721359
P粉334721359 2024-03-27 15:08:16
0
1
382

Kontext

  • PHP 5.6
  • IIS
  • Windows 11

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粉334721359
P粉334721359

Antworte allen(1)
P粉819533564

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

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

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage