为什么这个 php mkdir / uniqid 不起作用?

Why is this php mkdir / uniqid not working?

我有这段代码可以创建一个随机目录并将上传文件移动到那里:

$uploadPath = dirname( __FILE__ ) . DIRECTORY_SEPARATOR . mkdir( 'assets/post/email_uploads/{uniqid(attachment_)}', 0777 ) . DIRECTORY_SEPARATOR . $_FILES[ 'file' ][ 'name' ];

路径 assets/post/email_uploads/ 已经存在,因此随机文件夹应该放在 email_uploads 中。我面临的问题是在 DIRECTORY_SEPARATORs 之间放置什么并使一切正常。

当我尝试 mkdir( 'assets/post/email_uploads/{uniqid(attachment_)}', 0777 )

mkdir( 'assets/post/email_uploads/'.uniqid(attachment_), 0777 ) - 不创建文件夹,上传放在根目录。

当我尝试时

$attchmentPath = 'assets/post/email_uploads/';
$uploadPath = dirname( __FILE__ ) . DIRECTORY_SEPARATOR . $attchmentPath.mkdir( uniqid(attachment_), 0777 ) . DIRECTORY_SEPARATOR . $_FILES[ 'file' ][ 'name' ];

$attchmentPath = 'assets/post/email_uploads/';
$randomDir = mkdir( uniqid(attachment_), 0777 );
$newPath = $attchmentPath.$randomDir;
$uploadPath = dirname( __FILE__ ) . DIRECTORY_SEPARATOR . $newPath . DIRECTORY_SEPARATOR . $_FILES[ 'file' ][ 'name' ];

在根目录而不是所需路径创建了文件夹,并且根本没有上传文件。

大概是这样的? uniqid的内容要加引号(除非是常量)并且调用uniqid的函数需要对单引号字符串

进行转义
$dir=mkdir( __DIR__ . '/assets/post/email_uploads/'.uniqid('attachment_'), 0777 );
$name=$_FILES['file']['name'];
$uploadPath = $dir . DIRECTORY_SEPARATOR . $name;

您可以尝试递归函数来确保目录路径存在

function createpath( $path=NULL, $perm=0644 ) {
    if( !file_exists( $path ) ) {
        createpath( dirname( $path ) );
        mkdir( $path, $perm, TRUE );
        clearstatcache();
    }
    return $path;
}

$targetpath=__DIR__ . '/assets/post/email_uploads/'.uniqid( 'attachment_' );
$path=createpath( $targetpath );
echo $path;

我通过简单地在 mkdir 中添加一个参数 - TRUE 我遗漏了来解决了这个问题。所以功能代码是 - mkdir($path, 0777, TRUE) 其中 $path 是要创建的目录的路径。