【问题标题】:PHP mkdir() failing to workPHP mkdir()无法工作
【发布时间】:2012-09-16 18:50:08
【问题描述】:

这是我的代码;显然,我已经重命名了目录。 ;)

$thepath = "/var/www/vhosts/sub.domain.co.uk/web/apps/storage/".$userclient."/evidence/".$scid."/".$doctype."/";
$testdir = is_dir($thepath); 
if ($testdir == false) {
    mkdir($thepath, 0777);
}

在这种情况下,以下变量适用;

$userclient = '000';
$scid       = '9263';
$doctype    = 'Insurance Policy';

所以,路径应该是;

/var/www/vhosts/sub.domain.co.uk/web/apps/storage/000/evidence/9263/Insurance Policy/

我知道这是可行的,在我的代码中的其他任何地方,我都有其他应用程序使用几乎相同的设置。但是上面的那个似乎在 /evidence/ 上出错了 - 它将权限设置为 755,但是如果我将证据设置为 777(八进制),那么每次运行代码时都会创建目录。

我收到以下错误消息;

if (!@mkdir($thepath)) {
    $error = error_get_last();
    echo $error['message'];
}
mkdir(): No such file or directory

任何帮助将不胜感激,我必须在星期四之前完成这个申请 - 这个文件上传部分是最后一点!

谢谢!

【问题讨论】:

  • 它很有可能在空间上掉下来......
  • 这是不可能的,其他代码区域中的路径运行完美,并且运行完美 - 其中也有空格(URL 回读用 %20 替换空格 - 这很好 ^^)跨度>
  • 但是你的 PHP 代码没有把空格变成 %20.. 我个人会用反斜杠转义空格。
  • 感谢 cmets BugFinder,我现在可以根据设置递归使用它。多年来,我一直在目录中使用空格,而且它总是工作得很好,所以我从不为多余的位而烦恼;P

标签: php path directory mkdir


【解决方案1】:

PHP 找不到要在其中创建其他目录的目录。

您需要将$recursive参数设置为true:

mkdir($thepath, 0777, true);

【讨论】:

  • 但是代码在其他地方工作得很好,它创建目录没问题,一个目录短。 '000/evidence/9263/Insurance Policy/' 在哪里,在其他地方它会创建 '000/subimages/9263/picture.jpg' 没问题。 ://
  • @Daniil,虽然将 recursive 设置为 true 的建议是有效的,但您建议的代码将局部变量 $recursive 设置为 true 并将其作为模式传递。
  • 暂时没用 php。如何在 php 中设置关键字参数?
  • 有可能吗?我认为这只是第三个参数(见我的回答)。不过没关系,反正你的答案已经被接受了;)
  • @Michael Krelin - 黑客,看起来这真的不可能(stackoverflow.com/questions/7704339/…)。抱歉,修正了我的答案
【解决方案2】:

也许您也想尝试mkdir($path,$mode,true) 来创建缺失的链接?

【讨论】:

  • '$mode, true' 会做什么? D:
  • 您是否考虑过阅读 php mkdir 函数的文档?
  • 我有,是的,我的陈述看错了,我的意思是 - 它会如何使它有什么不同?该代码在其他任何地方都可以正常工作,但在这里会出现一个额外的目录。 ://
  • 好吧,如果你在/a/b 存在的地方创建目录/a/b/c,它应该可以正常工作。如果你只有/a 并且想创建/a/b/c,你还需要创建缺失的目录,这就是递归的用途。
  • 啊,我明白你的意思了。我已经尝试了这两个建议并且都使它起作用,所以非常感谢你们。 :)
猜你喜欢
  • 2013-06-21
  • 1970-01-01
  • 2017-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-28
  • 2013-11-06
相关资源
最近更新 更多