我有这段代码应该创建一个随机目录并在那里移动上传:
$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' ];
该文件夹是在根目录而不是所需的路径创建的,文件根本不会上传。
答案 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
是要创建的目录的路径。