gpt4 book ai didi

php - 在 PHP 中获取重命名的文件名

转载 作者:行者123 更新时间:2023-11-30 21:40:54 26 4
gpt4 key购买 nike

是否可以在 PHP 中重命名文件名?我正在尝试这段代码,但它没有给我 .ext 我认为我的 explode 命令有问题。任何人都可以帮助我吗?

这是我的代码

$target = '..\img\web\users'.DIRECTORY_SEPARATOR;

if ( 0 < $_FILES['file']['error'] ) {
echo 'Error: ' . $_FILES['file']['error'] . '<br>';
}else{
$temp = explode(".", $_FILES["file"]["name"]);
$newfilename = $user['email'] . '.' . end($temp);
move_uploaded_file($_FILES["file"]["tmp_name"], $target . $newfilename);

$q = "UPDATE users SET img ='$newfilename' WHERE email = '$user[email]'";
$r = mysqli_query($dbc, $q);

}

在那之后,它给了我 $newfilename = 'uploaded-file.'在我的 sql 表中没有扩展名。我的分机在哪里 :))

我正在尝试上传图像文件,用用户电子邮件地址更改它。

编辑:我的输入是这样的/和 jquery:

<img id="img" alt="User Pic" <?php if($user['img'] == ''){ echo 'src="img/web/user.png"'; }else{ echo 'src="img/web/users/'.$user['img'].'"'; } ?>  class="img-circle img-responsive" style="border:1px solid red; min-width:150px; min-height:150px; max-width:150px; max-height:150px;"><br />
<input id="avatar" name="file" type="file" class="btn btn-default btn-sm" style="padding:0px; margin:0px;" autocomplete="off" accept="image/x-png,image/gif,image/jpeg">

$('#save_details').on('click', function() {
var file_data = $('#avatar').prop('files')[0];
var form_data = new FormData();
form_data.append('file', file_data);

$.ajax({
url: 'admin/useredit.php', // point to server-side PHP script
dataType: 'text', // what to expect back from the PHP script, if anything
cache: false,
contentType: false,
processData: false,
data: form_data,
type: 'post'

});
});

$_FILES 的 var_dump:

array(1) { 
["file"]=> array(5) {
["name"]=> string(9) "index.jpg"
["type"]=> string(10) "image/jpeg"
["tmp_name"]=> string(24) "C:\xampp\tmp\php7489.tmp"
["error"]=> int(0)
["size"]=> int(4465)
}
}

最佳答案

我本来打算把它写成一条评论,但它变得太长了,所以我会把它写成一个答案,希望我是对的:

似乎正在发生的事情是,您在其他地方发生了另一个调用,该编辑 URL 在 file 处没有附加图像。指数。

有几种方法可以立即发生这种情况:

  1. 也许您在 ajax 调用后并没有阻止正常提交,并且再次发送了正常提交但表单编码错误? (如果您的页面在单击该按钮后刷新 - 这很可能就是发生的情况。)
  2. 您对同一脚本设置其他用户有其他 ajax 调用属性,但不是头像图像。
  3. 附录:其他错误也可能造成这种情况,请在浏览器的检查控制台/开发工具中查看您的网络事件。

如果我是对的 - 以下内容应该可以防止您所看到的情况发生:

if(!empty($_FILES['file'])) {

if ( 0 < $_FILES['file']['error'] ) {
echo 'Error: ' . $_FILES['file']['error'] . '<br>';
}else{
$temp = explode(".", $_FILES["file"]["name"]);
$newfilename = $user['email'] . '.' . end($temp);
move_uploaded_file($_FILES["file"]["tmp_name"], $target . $newfilename);

$q = "UPDATE users SET img ='$newfilename' WHERE email = '$user[email]'";
$r = mysqli_query($dbc, $q);
}
}

再次,假设我在这里是正确的 - 在您不发送文件的额外请求中 $_FILES['file']['error']评估为 null (并抛出 undefined index 警告)并且因为 (0 < null)评估为 false它会运行您的上传处理并更新用户记录即使该文件未附加在该特定请求中!

添加非空检查应该可以防止您意外地用无扩展记录覆盖正确的记录。

关于php - 在 PHP 中获取重命名的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51672930/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com