【问题标题】:How to know user permissions allow to create directory in PHP如何知道用户权限允许在 PHP 中创建目录
【发布时间】:2016-05-24 08:54:54
【问题描述】:

Q : 如何知道用户权限允许在 PHP 中创建目录?


案例:我想在PHP中使用mkdir()函数创建一个目录。

问题:我如何知道我处于管理员状态:能够使用当前操作系统创建目录权限。

此外,我想在使用mkdir() 函数之前检查一些操作触发器的权限。

另一个建议将不胜感激。

【问题讨论】:

  • 到目前为止你尝试了什么?
  • @rsz 如果它无法创建目录,我只是处理错误,不知道.. 我正在考虑在根目录中使用 is_write 或 is_read,但我认为这不是个好主意。

标签: php


【解决方案1】:

为了能够创建目录,您需要能够写入父目录。

所以最简单的解决方案是is_writableis_dir(所以你最初的想法是正确的)。例如:

if(isDirWritable($baseDir)) {
    mkdir($baseDir.'/'.$dirName);
} else {
    throw new \Excpetion(sprintf('%s is not a directory or is not writable', $baseDir));
}

function isDirWritable($dir) {
  return is_dir($dir) && is_writable($dir);
}

当然,如果您想区分非目录和不可写,当然可以使用代码,但这应该已经很简单了。

【讨论】:

  • 为什么这比检查mkdir 的返回值并在必要时处理错误更好?
  • @Pred 仅仅是因为代码的执行流程不应该由异常或错误驱动。所有 PHP 扩展和内置方法可能并不总是可行,但在这种情况下,它是并且应该是首选 (IMO)。
  • 每次你想创建一个目录时都会调用一个方法,它会做同样的检查。在这种情况下,更有效的方法是实际尝试执行操作并在失败时处理事件。此解决方案没有任何好处,增加了额外的复杂性并且无法检查操作是否已完成。在这种情况下,检查所有可能的错误源效率不高。 (海事组织)
  • 对此进行反映:the execution flow of the code should never be driven by exceptions or errors。获得一个告诉我们外部操作成功完成的结果并不是异常或错误。这就是文件系统的工作方式(当它不能做某事时报告)。预计此类 API 的结果将在调用应用程序中处理。 app 不是 PHP 代码,API 是文件系统函数,API 调用可以返回 true 或 false。
  • @Pred 不要误会我的意思,这离题了 ;) 但我同意这可能不是一直都是最好的解决方案(尤其是当它严重影响性能时)。我在某种程度上同意你的第二条评论。问题是这个特定的 API 不仅返回真/假。它发出警告。即使您可以将其转换为异常,它仍然是通用的并且没有真正的帮助。然后您需要使用 try/catch 块包装所有此类 API 调用(并且请不要建议抑制警告)。如果您愿意,我们可以在私人对话中继续讨论:)
猜你喜欢
  • 2017-06-07
  • 1970-01-01
  • 2012-02-04
  • 2013-07-28
  • 2015-02-08
  • 1970-01-01
  • 1970-01-01
  • 2012-01-17
  • 2012-04-14
相关资源
最近更新 更多