mkdir在中创建文件夹./-无法打开流


mkdir create a folder in ../ - failed to open stream

文件夹结构(窗口)

[root] level 0
      - [lib] level 1
        - core.php
      - [logs] level 1
         -[preg_match number] level 2
          - preg_match number.log
      - [ajax] level 1
         - log_gen.php
      - log_gen_root.php 
[/root]

lib/core.php生成器的片段

if (preg_match('~'d{24}~', $fname, $m)){
//var_dump($m[1]);
    if (!file_exists('logs/'.$m[0])) {
    mkdir('logs/'.$m[0], 0777, true);
}
}

我在lib/core.php中找到了mkdir函数,preg_match获取数字(作为$fname)并返回数字(作为$m[0])。。有两种选择

$fname等于:变量1。第一个变体是从根文件夹创建的,例如log_gen_root.php,这里一切正常

logs/544444466666666666666667/544444466666666666666667.log

$fname等于:变量2。第二种变体是,当我试图从ajax/log_gen.php位置访问同一mkdir时,会导致错误。在这两种情况下,日志文件夹都位于根目录中。

../logs/544444466666666666666666/544444466666666666666666.log

警告:file_put_contents(../logs/544444466666666666/544444466676666666666.log):无法打开流:在第103行的C:''examplep''htdocs''proj''lib''core.php中没有这样的文件或目录

这里可能发生两件事:

  1. 您在lib目录上没有创建新文件夹的正确权限
  2. 您的路径不正确

请尝试使用以下代码获取目录,而不是使用相对路径。

$folder = realpath(__DIR__ . '/..') . '/lib/';
if (!file_exists($folder . $m[0])) {
    mkdir($folder . $m[0], 0777, true);
}