是否可以在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)
}
}
答案 0 :(得分:0)
我本来要对此发表评论,但是它变得太长了,所以我将其写为答案,并且希望我是正确的:
似乎正在发生的事情是,您在该编辑URL的其他地方发生了另一个调用,该调用没有在file
索引处附加图像。
有几种方法可以立即实现:
如果我是对的,则以下内容应阻止您看到的内容发生:
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
(并抛出未定义的索引警告),并且自{{1} }评估为(0 < null)
,它将运行您的上传过程并更新用户记录,即使该文件未附加在该特定请求中!
添加非空支票应该可以防止您意外地用无扩展名的记录覆盖正确的支票。