子資料夾的權限被拒絕
P粉334721359
P粉334721359 2024-03-27 15:08:16
0
1
326

上下文

  • PHP 5.6
  • IIS
  • Windows 11

問題

我正在嘗試在特定資料夾中寫入文件,但它給了我 permission returned 。 因此,我驗證了權限,一切似乎都正常。因為這是在開發環境中,所以我決定將寫入所有檔案的「根」資料夾的權限更改為「每個人都可以做任何事情」。我嘗試替換下面的所有權限。我試圖刪除繼承的權限。什麼都做不了。

然後我嘗試在“根”資料夾中寫入一個文件。它起作用了。在子資料夾上,它起作用了。在子子資料夾上。有效。在子資料夾鏈中,有一個點不起作用,但在真正的子資料夾之前。

這是崩潰時的路徑層次結構。

$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):無法開啟串流:權限被拒絕

百分百清楚:「根」資料夾是 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);
}

P粉334721359
P粉334721359

全部回覆(1)
P粉819533564

該問題來自 PHP 5.6.26。使用 PHP 5.6.40 修復了這個問題。

我重置為原來的權限,一切都很好!

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板