// uploadForm.html
<html>
<body>
<form action="upload_file.php" method="post" enctype="multipart/form-data">
<label for="browseFile">Filename : </label>
<input type="file" name="file" id="browseFile"><br>
<input type="submit" name="submit" value="Submit">
</body>
</html>
// upload_file.php
<?php
$allowedExt = array("png","jpg");
$temp = explode(".",$_FILES["file"]["name"]);
$extension = end($temp);
echo "uploading...";
if((($_FILES["file"]["type"]=="image/png") || ($_FILES["file"]["type"]=="image/jpg")) && ($_FILES["file"]["size"] < 1000000))
{
echo "success";
if($_FILES["file"]["error"] > 0)
{
echo "error in uploading" . $_FILES["file"]["error"]."<br>";
}
else
{
echo "<p>uploaded successfully</p>";
}
}
else
echo "invalid file" ;
echo $_FILES["file"]["name"]."stored in ".$_FILES["file"]["tmp_name"]."<br>";
move_uploaded_file($_FILES["file"]["tmp_name"],"uploads/".$_FILES["file"]["name"]);
echo "moved Successfully";
?>
当我尝试回显临时目录名称时,它是空白的。上传的文件丢失了。
我不会在MAMP/htdocs
目录中的/tmp/
文件夹中找到它。
我在uploads
中没有/MAMP/htdocs/
目录。如果该程序不存在,程序是否会创建一个目录?
答案 0 :(得分:2)
在最终说明中,您有$_FILES['name']['tmp_name']
而不是$_FILES['file']['tmp_name']
。
顺便说一下,你的脚本中有一些错误:
$_FILES["file"]["type"]
是浏览器发送的值(即:客户端)。恶意攻击者可能会向您发送任何类型的文件并将其伪装成image/png
,并且您信任它。你不能相信这个价值。相反,你可以使用getimagesize
,它返回一个具有图像的mime类型的数组(并由服务器检测(即:由你)。要检测mime类型的非图像,你可以使用FileInfo
,具体来说是finfo_file
。此外,如果php脚本不存在,则不会创建uploads
文件夹,而是显示错误(并且不执行任何操作)。您必须首先创建此文件夹,并确保运行您的php脚本的用户(通常与运行您的http服务器相同)具有该目录的写权限。
编辑:您在临时目录中看不到任何上传的文件,因为(引用http://www.php.net/manual/en/features.file-upload.post-method.php):
该文件将从临时目录中删除 请求是否尚未移走或重命名。
答案 1 :(得分:0)
$_FILES["name"]["tmp_name"]
不存在,应为$_FILES["file"]["tmp_name"]
答案 2 :(得分:0)
$allowedExt = array("png","jpg");
echo $temp = explode(".",$_FILES["file"]["name"]);
$extension = end($temp);
echo "uploading...";
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br>";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}