我看过一些与此问题有关的内容类型的帖子,但我不知道如何处理这些信息。所以我写这篇文章是为了在我的具体问题上得到一些帮助。
这是我用PHP的HTML:
<div class="hello-text">
<?php
if($_SESSION['fname'] != ""){
$result = glob ("users/" . $_SESSION['user_id'] . "/profile_picture.*");
if($result){
echo "users/" . $_SESSION['user_id'] . "/profile_picture";
echo "<div style='height: 50px; width: 50px; overflow-x: hidden;'><img src= 'users/" . $_SESSION['user_id'] . "/profile_picture' style='height:100%;'></div>";
}else{
echo "<form action='pp_upload.php' method='POST' enctype='multipart/form-data'><input type='file' onchange='this.form.submit()' name='image' id='file-input' style='display: none;'/><label for='file-input'><img src='images/set-profile-picture.jpg' style='height:50px; cursor: pointer;'></label></form>";
}
echo " Hello, " . $_SESSION['fname'] . " ";
} else {
echo "Please enter your details using the 'change' link below ";
}
?>
</div>
基本上我想做的是在一个字符串旁边呈现用户的个人资料图片,说出&#34;你好,[用户的名字]&#34;。最初if语句不起作用,但我使用glob()
函数解决了这个问题。现在,当我尝试通过在文件结构中查找图像(使用他们在数据库中的用户ID)来呈现他们的个人资料图片时,它无法呈现图像。我猜这是因为我没有对图片名称进行扩展,但我无法确定。
我还没有在网址上获得文件扩展名,因为我允许用户上传任何文件类型的图片。如果用户没有个人资料图片,那么它将触发else
语句,该语句呈现他们可以点击的图像以上传他们的个人资料图片。如果用户在数据库中没有名字,那么它会要求他们在页面底部的表格中输入他们的名字。
以下是用户上传个人资料图片时的内容:
<?php
session_start();
if(isset($_FILES['image'])){
$errors= array();
$file_name = $_FILES['image']['name'];
$file_size =$_FILES['image']['size'];
$file_tmp =$_FILES['image']['tmp_name'];
$file_type=$_FILES['image']['type'];
$file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));
$expensions= array("jpeg","jpg","png");
if(in_array($file_ext,$expensions)=== false){
$errors[]="extension not allowed, please choose a JPEG or PNG file.";
}
if($file_size > 2097152){
$errors[]='File size must be excately 2 MB';
}
if(empty($errors)==true){
move_uploaded_file($file_tmp,"users/" . $_SESSION['user_id'] . "/" . $file_name);
rename("users/" . $_SESSION['user_id'] . "/" . $file_name, "users/" . $_SESSION['user_id'] . "/profile_picture." . $file_ext);
echo "Success";
}else{
print_r($errors);
}
}
答案 0 :(得分:1)
您的个人资料图片未被称为profile_picture
,他们被称为
profile_picture.jpeg
,profile_picture.jpg
或profile_picture.png
。在HTML中引用此文件时,必须使用完整名称。你的服务器怎么知道要知道要服务的文件?
执行此操作的一种方法是使用glob()
:
if ($result) {
echo $result[0];
}
此值应包含与glob模式匹配的第一个文件的路径和文件名,包括其扩展名。
当然,如果用户上传多张个人资料图片,例如同时导致目录中存在profile_picture.jpg
和profile_picture.png
,则可能无法获得所需的图片。对此的一些可能的解决方案是在上载新的个人资料图片文件时删除旧的个人资料图片文件,或者在某个地方存储用户个人资料图片的完整路径,例如,在数据库中。