【问题标题】:PHP is_dir defectivePHP is_dir 有缺陷
【发布时间】:2017-07-31 16:21:39
【问题描述】:

奇怪的行为,特别是: (文件夹的名称取决于日期 - 目的是网站的计数器,按天细分)

if (!is_dir($folder)) { // first access in the day
   mkdir($folder);
}

嗯:在互联网上的服务器上一切正常。 但是当我在本地尝试使用 Easy PHP 的服务器模拟器时,会发生这种情况:

(a) 第一次,没问题。文件夹不存在,已创建。

(b) 随后,例如页面刷新,程序流程再次进入 IF (!!!) 生成错误(在 mkdir 行):“Warning: mkdir(): No such file或 [...]" 中的目录。

目录 $folder 的所有父部分都存在。

谢谢

.

【问题讨论】:

  • 目前还不清楚$folder是如何创建的,为了调试你应该在每次脚本到达这个地方时打印$folder的值。因为如果$folder 持有无效的东西!is_dir() 将返回truemkdir() 不能从中创建文件夹。像这样mkdir('path/to/folder',0777, true); 做一个 mkdir() 在这里阅读更多stackoverflow.com/a/15012257/4916265

标签: php


【解决方案1】:

尝试使用递归目录创建函数:

function mkdir_r($dirName, $rights = 0777)
    {
        $dirs = explode(DIRECTORY_SEPARATOR , $dirName);
        $dir = '';
        if (strpos($dirs[count($dirs) - 1], '.')) {
            array_pop($dirs);
        }
        foreach ($dirs as $part) {
            $dir .= $part . DIRECTORY_SEPARATOR ;
            if (!is_dir($dir) && strlen($dir) > 0) {
                mkdir($dir, $rights);
            }
        }
    }

这样,如果您想要创建的目录不存在,所有目录都会被创建。

不幸的是,mkdir 不能递归地工作。

【讨论】:

  • 如果将第三个参数设置为truemkdir 会递归工作。
  • 我遇到了与此相同的问题:php.net/manual/en/function.mkdir.php#68207 使用 IIS 和 php 5.6 所以这就是我使用它的原因。递归函数应该可以工作,但并非总是如此。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-30
  • 1970-01-01
  • 2018-05-29
  • 2021-03-19
  • 2014-08-08
  • 2020-06-06
  • 2011-01-16
相关资源
最近更新 更多