[英]Permission denied from a subfolder
我正在嘗試在特定文件夾中寫入文件,但它給了我permission denied
。 所以,我驗證了權限,一切似乎都很好。 因為這是在開發環境中,所以我決定將“每個人都可以做任何事情”的權限更改為寫入我所有文件的“根”文件夾。 我試圖替換下面的所有權限。 我試圖刪除繼承的權限。 什么都沒有。
然后我嘗試在“根”文件夾中寫入一個文件。 它起作用了。在子文件夾上,它起作用了。 在子子文件夾上。 有效。 在子文件夾鏈中有一個點它不起作用,但在真正的子文件夾之前。
這是崩潰時的路徑層次結構。
$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");
\wee\common\IO\File
類是我的創作,但在許多其他地方也可以使用。
我得到的確切錯誤消息是:
fopen(DRIVE:/BASE_PATH/files/-/mod/com.ci.company/site/00.jpg): failed to open stream: Permission denied
只是要 100% 清楚:“根”文件夾是DRIVE:/BASE_PATH/files/
下面是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);
}
問題來自 PHP 5.6.26。 使用 PHP 5.6.40 修復了它。
我重置為原始權限,一切都很好!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.