为什么这个 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
是要创建的目录的路径。
我有这段代码可以创建一个随机目录并将上传文件移动到那里:
$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
是要创建的目录的路径。