簡體   English   中英

來自子文件夾的權限被拒絕

[英]Permission denied from a subfolder

語境

  • PHP 5.6
  • IIS
  • 視窗 11

問題

我正在嘗試在特定文件夾中寫入文件,但它給了我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/

編輯#1

下面是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM