在Windows上创建文件夹后,文件上传不会移动

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Windows上创建文件夹后,文件上传不会移动相关的知识,希望对你有一定的参考价值。

我在here找到了和我一样的案例。我尝试使用mkdiron php制作文件夹,它也可以工作,在mysql中也可以链接到文件中。但是,为什么我的文件不会进入新文件夹?如果我从php中删除md5,它就像正常一样工作。我使用XAMPP 5.6.30,而我的XAMPP文件夹不在C:system上。我弄错了吗?我的代码:

<?php
	include('conn.php');
	
	foreach ($_FILES['upload']['name'] as $key => $name){
		
		$newFilename = time() . "_" . $name;
		
        move_uploaded_file($_FILES['upload']['tmp_name'][$key], 'upload/'.md5(time()).'/' . $newFilename);
		
        $location = 'upload/'.md5(time()).'/' . $newFilename;
        
		mkdir('upload/'.md5(time()).'/');
        
		mysqli_query($conn,"insert into photo (location) values ('$location')");
	}
	header('location:index.php');
?>
答案

您甚至在创建文件夹之前尝试移动文件

// Here you try to move the file but the directory is not created yet
move_uploaded_file($_FILES['upload']['tmp_name'][$key], 'upload/'.md5(time()).'/' . $newFilename);
$location = 'upload/'.md5(time()).'/' . $newFilename;
// after trying to move the file you create the directory, but the directory should be created first
mkdir('upload/'.md5(time()).'/');

这是一个工作代码(请参阅顺序:首先是mkdir然后是move_uploaded_file:

include('conn.php');
foreach ($_FILES['upload']['name'] as $key => $name){
    $ts = time();
    $crptd = md5($ts);
    $newFilename = $ts . "_" . $name;
    $location = 'upload/'.$crptd.'/' . $newFilename;
    mkdir('upload/'.$crptd.'/');
    move_uploaded_file($_FILES['upload']['tmp_name'][$key], 'upload/'.$crptd.'/' . $newFilename);
    mysqli_query($conn,"insert into photo (location) values ('$location')");
}
header('location:index.php');
另一答案

在这两个步骤之间:

$location = 'upload/'.md5(time()).'/' . $newFilename;
mkdir('upload/'.md5(time()).'/');

time()值不一样,你将它用作常量,你需要先将它存储在var中另外,我不认为为你上传的每个文件创建一个新文件夹是有用的

另一答案

首先,我将为上传创建一个名为uploads的目录

mkdir上传

然后确保它具有写入权限

然后我会使用以下内容

include('conn.php');

foreach ($_FILES['upload']['name'] as $key => $name){
    $newfilename = "";
    $ts = time();
    $newfilename = $ts."_".$name;
    move_uploaded_file($_FILES['upload']['tmp_name'][$key], 'uploads/'.$newfilename);
    mysqli_query($conn,"insert into photo (location) values ('$newfilename');')");
}
header('location:index.php');

除非你有理由让所有的上传文件夹都是独一无二的,否则我认为随着时间的推移会变得混乱和难以管理。

另一答案

问题可能是md5(time())每次都会生成一个新结果。我会把它变成一个变量并使用变量而不是每次重新计算它

以上是关于在Windows上创建文件夹后,文件上传不会移动的主要内容,如果未能解决你的问题,请参考以下文章

Windows 上创建的文件,上传到 Linux 服务器,文件名乱码?

从windows向Linux上传文件,为啥用RZ命令上传文件后,文件权限为600,而其他文件权限都为644?

ajax文件上传超时

Eclipse - JAR 创建失败“找不到类路径上的类文件或无法访问...”

js 移动端 多图上传 预览 传给后端

如何通过git把本地的代码上传到服务器