Autorisation refusée pour le sous-dossier
P粉334721359
P粉334721359 2024-03-27 15:08:16
0
1
350

Contexte

  • PHP 5.6
  • IIS
  • Windows 11

Question

J'essaye d'écrire un fichier dans un dossier spécifique mais ça me donne permission returned . J'ai donc vérifié les autorisations et tout semblait bien. Comme il s'agit d'un environnement de développement, j'ai décidé de modifier les autorisations sur le dossier « racine » qui écrit tous les fichiers dans « Tout le monde peut tout faire ». J'ai essayé de remplacer toutes les autorisations ci-dessous. J'essaie de supprimer les autorisations héritées. Rien ne peut être fait.

Ensuite, j'ai essayé d'écrire un fichier dans le dossier "root". Ça marche. Sur les sous-dossiers, cela a fonctionné. sur les sous-sous-dossiers. efficace. Il y a un point dans la chaîne de sous-dossiers où cela ne fonctionne pas, mais avant le sous-dossier lui-même.

Il s'agit de la hiérarchie des chemins au moment du crash.

$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");

Class weecommonIOFile a été créé par moi, mais peut être utilisé dans de nombreux autres endroits.

Le message d'erreur exact que j'ai reçu était :

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

Clarté à cent pour cent : le dossier "racine" est DRIVE:/BASE_PATH/files/

Edit #1

Voici la mise en œuvre de la méthode File类的write.

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

répondre à tous(1)
P粉819533564

Ce problème vient de PHP 5.6.26. Ce problème est résolu avec PHP 5.6.40.

J'ai réinitialisé les autorisations d'origine et tout va bien !

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal