【问题标题】:PHP mkdir - Why is this an invalid argument?PHP mkdir - 为什么这是一个无效的参数?
【发布时间】:2014-08-01 21:09:18
【问题描述】:

我想尝试创建以日期和当前时间为标题的目录。我知道我可以使用 php time() 函数,但这对我来说很难阅读。为什么我不能创建一个名为 06-11-2014 11:37:04 左右的目录?当我尝试使用这种格式时,php mkdir 函数给了我一个无效的参数。

php代码

<?php
$newdate = date("m-d-Y H:i:s");

mkdir($newdate, 0755, true);

?>

【问题讨论】:

  • 因为077使用0777;你忘记了7。更好的是,使用0755 更安全。
  • @Fred-ii- 嗯,0777 或 0755 不走运,仍然得到无效参数。
  • 大多数文件系统不允许在文件或目录名称中使用冒号。

标签: php date mkdir


【解决方案1】:

日期中的冒号搞砸了。最好的办法是使用如下格式:

$newdate = date("m-d-Y H_i_s");

【讨论】:

  • 就是这样!我会尽可能接受你的回答。我的文件系统不允许在目录标题中使用冒号。
  • 这是由于 linux 文件命名约定。
  • 旁注:我的(托管)服务器是 Linux,使用冒号对我来说效果很好。也一定是它的设置方式,我无法控制。
  • @wheatfairies 我的回答也指出了: 的问题。但我相信这是 Mac OS X 和其他 BSD 变体上的问题。我刚刚尝试在 Ubuntu(Debian)上基于带有冒号的日期创建一个目录,它运行良好。也许我现在需要研究 GNU 或文件系统的差异?
  • @wheatfairies 我认为这也是一件好事,因为根据经验,如果我在服务器上创建一个包含冒号的文件,然后尝试将其上传到我的计算机(基于 Windows),Windows会给我一个错误。在使用文件命名约定时,我很少或从不使用的字符是连字符、空格和冒号,但在代码中却是单独使用的。 干杯
【解决方案2】:

你有这个:

mkdir($newdate, 077, true);

但应该是:

mkdir($newdate, 0777, true);

但是那说777 权限是一个安全风险。你最好改用775755

mkdir($newdate, 0755, true);

777 权限的问题在于,它意味着有权访问您系统的任何人 100% 都可以读取、写入或执行该目录中的任何内容。如果您被黑客入侵,或者甚至像您自己错误输入路径并清除您不应该清除的数据一样,这只会为您以后的头痛打开一扇门。

文件和目录权限不应只对世界上任何使用777 的人开放。

编辑:原始发帖人说,即使权限已更正,他们仍然遇到问题。我唯一的建议是更改代码:

$newdate = date("m-d-Y H:i:s");
mkdir($newdate, 0777, true);

到这里:

$newdate = date("m-d-Y_H-i-s");
mkdir($newdate, 0755, true);

我认为问题在于其中包含 : 的文件或目录名称只会在 Mac OS X 等某些系统上阻塞。我还在日期和时间之间放置了一个下划线 (_)。

【讨论】:

  • 我没有得到任何运气,但我现在肯定会使用 0755。还有其他想法吗?
  • 你看 Jake,我使用“cmets”的另一个原因 ;-)
  • 就是这样,文件命名不允许我在目录名中有冒号。
猜你喜欢
  • 1970-01-01
  • 2011-04-08
  • 2019-01-03
  • 1970-01-01
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
  • 2015-07-29
  • 2018-06-26
相关资源
最近更新 更多