我希望用户能够上传个人资料图片(可以是.jpg
或.png
),我也希望这能显示在他们的个人资料上。我已经写了一些代码,基于我在这里找到的源代码,在Stackoverflow和谷歌上。然而,它似乎不起作用,我找不到我的错误。
这是html
<form action="account_settings.php" method="POST">
<input type="file" name="profilePicture"><br><br>
<input type="submit" value="Change!">
</form>
这就是如何处理上传的文件。
<?php
include ('inc/header.inc.php');
if(isset($_FILES["profilePicture"]["tmp_name"]) && isset($_FILES["profilePicture"]["name"])) {
$ext = pathinfo($_FILES['profilePicture']['name'], PATHINFO_EXTENSION);
$name = $_SESSION['user_login'];
$tmp_name = $_FILES["profilePicture"]["tmp_name"];
if($ext == 'png' || $ext == 'jpg') {
if (isset($tmp_name)) {
if(!empty($tmp_name)) {
$location = '../profielfotos/';
$full_name = $name.'.'.$ext;
if(move_uploaded_file($tmp_name, $location.$full_name)) {
echo 'Photo uploaded!';
}
Down here are just some else statements with error reports.
下面的代码用于显示图像。我把一张图片放在个人资料图片文件夹中进行了测试,它确实显示了图片。然而,仍然存在一个问题。人们可以上传.jpg
或.png
,我如何让网站显示图片(找到扩展名正确的个人资料图片)。
我已将此代码放入<img>
标记的src
属性中。
<?php if ($handle = opendir('profielfotos/')) {
$file = mysql_real_escape_string($_GET['u']);
echo 'profielfotos/'.$file.'.png';
}
closedir($handle);
我希望有人能帮忙,提前谢谢!ps。这是我第一篇关于堆栈溢出的文章:-D!
由于您没有存储任何关于上传文件的信息,您只需要使用file_exists()
方法检查哪个文件存在。请参阅此处:
http://php.net/manual/en/function.file-exists.php
所以你的代码会变成这样(未测试):
<?php if ($handle = opendir('profielfotos/')) {
$file = mysql_real_escape_string($_GET['u']);
if (file_exists('profielfotos/'.$file.'.png')) {
echo 'profielfotos/'.$file.'.png';
} else if (file_exists('profielfotos/'.$file.'.jpg')) {
echo 'profielfotos/'.$file.'.jpg';
}
}
closedir($handle);
您需要在表单中添加以下内容:
<form action="account_settings.php" method="POST" enctype="multipart/form-data">
否则,它将不允许上传文件,因为它只需要文本。
这是完全不安全的。用户上传的文件不得存储在网络服务器的根目录中。
相反,将文件放在文档根目录之外的某个位置。
编写一个处理程序,控制文件
- 通过检查内容而不是扩展来检查mime类型
- 有任意的名字,而不是上传的名字,这可能会干扰(想象5个人上传一个"profile.png")
- 让处理程序通过id("…imagloader?file=4711")传递图像
- 文件的名称(以及扩展名和位置)存储在数据库中(是否有用户记录?)