在Windows上创建文件夹后,文件上传不会移动
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Windows上创建文件夹后,文件上传不会移动相关的知识,希望对你有一定的参考价值。
我在here找到了和我一样的案例。我尝试使用mkdir
on 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?