Kebenaran ditolak untuk subfolder
P粉334721359
P粉334721359 2024-03-27 15:08:16
0
1
308

Konteks

  • PHP 5.6
  • IIS
  • Windows 11

Soalan

Saya cuba menulis fail dalam folder tertentu tetapi ia memberi saya permission returned . Jadi saya mengesahkan kebenaran dan semuanya kelihatan baik. Memandangkan ini berada dalam persekitaran pembangunan, saya memutuskan untuk menukar kebenaran pada folder "root" yang menulis semua fail kepada "Semua orang boleh melakukan apa sahaja." Saya cuba menggantikan semua kebenaran di bawah. Saya cuba mengalih keluar kebenaran yang diwarisi. Tiada apa yang boleh dilakukan.

Kemudian saya cuba menulis fail dalam folder "root". Ianya berfungsi. Pada subfolder ia berfungsi. pada sub-subfolder. cekap. Terdapat satu titik dalam rantaian subfolder di mana ia tidak berfungsi, tetapi sebelum subfolder sebenar.

Ini ialah hierarki laluan pada masa ranap sistem.

$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");

Kelas weecommonIOFile dicipta oleh saya, tetapi boleh digunakan di banyak tempat lain.

Mesej ralat tepat yang saya terima ialah:

fopen(DRIVE:/BASE_PATH/files/-/mod/com.ci.company/site/00.jpg):无法打开流:权限被拒绝

Seratus peratus jelas: folder "root" ialah DRIVE:/BASE_PATH/files/

Sunting #1

Berikut adalah pelaksanaan kaedah 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

membalas semua(1)
P粉819533564

Isu ini datang daripada PHP 5.6.26. Isu ini dibetulkan dengan PHP 5.6.40.

Saya menetapkan semula kepada kebenaran asal dan semuanya baik-baik saja!

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!