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/
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); }
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 !