【问题标题】:Mkdir throws a warning, when it should be a bool?Mkdir 抛出警告,什么时候应该是布尔值?
【发布时间】:2013-03-18 17:40:01
【问题描述】:

所以 php 中流行的 mkdir() 函数在以下代码中向我抛出了警告:

public function check_dir($dir, $create_dir = false) {
    if (is_dir ( $dir )) {
        return true;
    } elseif ($create_dir == true) {
        return mkdir ( $dir );
    }

    return false;
}

很容易知道发生了什么。所以我就不解释了。但在 mkdir() 行我得到:

警告:mkdir(): Permission denied in /var/www/wordpress/wp-content/themes/Aisis-Framework/AisisCore/FileHandling/File.php on line 70

因此,尽管它只是一个警告,仅此而已,但您永远不应该在现场打开警告,或者任何类型的错误。那么,当它明确声明它返回真或假而不是警告或致命时,我该如何处理呢?

【问题讨论】:

  • 您可以获得对服务器的写入权限吗?那应该解决它
  • 实际上,您应该关闭“live”中的警告(假设“live”是指“production”)。你不应该在开发期间关闭警告。
  • 另外,您可以关闭显示的错误/警告消息并将它们发送到日志文件
  • 您应该关闭ANY环境中的警告或错误。相反,您应该在生产中将它们从标准输出更改为日志文件。你应该绝对在生产中关闭display_errors
  • @TheWebs 不,你大错特错了。如果您想在生产环境中将后端 PHP 噪音吐到页面上,那么欢迎您这样做,但是当您能够记录 错误时,您的立场就相当站不住脚了。

标签: php mkdir


【解决方案1】:

您可以建立一个自定义错误处理程序,这通常是一个很好的做法:http://www.php.net/set-error-handler

您可以使用它以您认为合适的任何方式处理任何 PHP 错误。除此之外,您将不得不关闭错误/警告日志记录(正如您所说,这不是一个好习惯),或者使用@抑制(通常应该避免,但在这种情况下可能适合。)

我个人同意,返回真/假以指示失败的函数已经不需要在失败时发出警告。但是,这就是你的 PHP。

【讨论】:

  • 那么在这种情况下抑制警告是否合适,因为我已经处理了这个返回错误?
  • 我会说是的,在这种情况下,使用@ 错误抑制可能没问题。这只是很容易被过度使用/滥用的东西,我尽可能避免它。但在这种情况下,API 本身似乎对你不利,我认为压制它是有意义的。
【解决方案2】:

您应该在生产服务器中关闭警告...但更好的是...您可以检查代码中的权限...

function checkDir($dir, $createDir = false) {
    if ($createDir === true) {
        if (is_dir($dir))
            return true;
        $baseDir = dirname($dir);
        if (! is_dir($baseDir) || ! is_writable($baseDir)) {
            return false;
        }
        return mkdir($dir);
    } else {
        return is_dir($dir);
    }
    return false;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 2014-07-25
    • 2019-05-15
    • 2013-10-31
    • 2011-05-30
    • 2011-03-22
    • 2011-11-10
    相关资源
    最近更新 更多