recherche

Maison  >  Questions et réponses  >  le corps du texte

Autorisation refusée pour le sous-dossier

Contexte

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粉334721359P粉334721359282 Il y a quelques jours369

répondre à tous(1)je répondrai

  • P粉819533564

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

    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 !

    répondre
    0
  • Annulerrépondre