为什么这个php mkdir / uniqid无效?

时间:2018-01-17 08:29:33

标签: php random file-upload mkdir

我有这段代码应该创建一个随机目录并在那里移动上传:

$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' ];

OR

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

该文件夹是在根目录而不是所需的路径创建的,文件根本不会上传。

2 个答案:

答案 0 :(得分:0)

也许是这样的?应引用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;

答案 1 :(得分:0)

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