Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP Mkdir不是递归执行的吗?_Php_Mkdir - Fatal编程技术网

PHP Mkdir不是递归执行的吗?

PHP Mkdir不是递归执行的吗?,php,mkdir,Php,Mkdir,以下功能在windows中工作: mkdir('../my/folder/somewhere/on/the/server', 0777, true); 我是说 它可以完美地工作,并递归地创建子文件夹。但是,如果在linux服务器上运行相同的命令,则不会创建文件夹 之前,我通过分解路径并逐个创建每个文件夹来解决这个问题。但我不想这样做,因为它应该与“复活”标志设置为真。为什么不起作用?这是我们发现的东西 确保根路径存在 确保根路径是可写的 不要使用。始终使用实路径 范例 $fixedRoot

以下功能在windows中工作:

mkdir('../my/folder/somewhere/on/the/server', 0777, true);
我是说

它可以完美地工作,并递归地创建子文件夹。但是,如果在linux服务器上运行相同的命令,则不会创建文件夹


之前,我通过分解路径并逐个创建每个文件夹来解决这个问题。但我不想这样做,因为它应该与“复活”标志设置为真。为什么不起作用?

这是我们发现的东西

  • 确保根路径存在
  • 确保根路径是可写的
  • 不要使用
    始终使用实路径
范例

$fixedRoot = __DIR__;
$recusivePath = 'my/folder/somewhere/on/the/server';

if (is_writable($fixedRoot) && is_dir($fixedRoot)) {
    mkdir($fixedRoot . DIRECTORY_SEPARATOR . $recusivePath, 0, true);
} else {
    trigger_error("can write to that path");
}

很抱歉,除了
mkdir
命令本身之外,肯定还有一些问题

这个小示例按预期工作,并在Linux上执行时递归地为我创建目录:

#!/usr/bin/php
<?php
mkdir ('testdir/testdir2/testdir3',0777,TRUE);
?>
#/usr/bin/php

确保您的PHP用户(例如
www-data
)有权写入其试图创建的任何文件夹的父文件夹。PHP需要能够写入已经存在的最低版本

例如,在
。/my/folder/somewhere/on/the/server
的情况下,如果
。/my
已经存在,并且PHP能够写入
但不能写入
my
mkdir
将失败


如果您的用户是
www-data
,您可以使用
sudo-chown-R www-data:www-data../my
my
及其所有子文件夹授予写入权限。

阅读手册页面非常有用-适用于我(linux上的php内部)。当您使用绝对路径时会发生什么情况?在这种情况下,绝对路径不是我的选项。是否打开了错误报告?请添加
错误报告(E\u ALL);ini_设置(“显示错误”、“打开”)
var\u dump
我想查看输出。。。。