子文件夹的权限被拒绝
P粉334721359
P粉334721359 2024-03-27 15:08:16
0
1
282

上下文

  • 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 修复了这个问题。

我重置为原来的权限,一切都很好!

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!