php文件上傳代碼解析
is_uploaded_file() //函數判斷指定的文件是否是通過 HTTP POST 上傳的,返回一個布爾值。
$_FILES['upfile']['tmp_name'] //儲存的臨時文件名,一般是系統默認。
is_uploaded_file($_FILES['upfile']['tmp_name']) //判斷上傳是否成功。
$upfile=$_FILES["upfile"] //傳輸表單的name。
$tmp_name=$upfile["tmp_name"] // 上傳文件的臨時存放路徑.
rename(); //重命名。
copy(); //復制。
upload_move_file(); //移動。
$type=$upfile["type"] //上傳文件的類型。
$size=$upfile["size"] //上傳文件的大小。
$date=date('Ymdhis'); //得到當前時間,如;20070705163148.
move_uploaded_file($tmp_name,'uploads/'.iconv("UTF-8", "gbk",$name)); //對文件名進行強制轉碼iconv("UTF-8", "gbk",$name),將UTF8轉換成gbk,這樣就不會出現亂碼了
unlink ("001.png"); //php刪除本地文件代碼 注!中文字符可能會導致亂碼,需要對其進行 字符轉換 iconv("UTF-8","gbk",$值)
move_uploaded_file($tmp_name,'uploads/'.$name); //把上傳的臨時文件移動到uploads目錄下面
$error=$upfile["error"]
/**
* 0:文件上傳成功<br/>
* 1:超過了文件大小,在php.ini文件中設置<br/>
* 2:超過了文件的大小MAX_FILE_SIZE選項指定的值<br/>
* 3:文件只有部分被上傳<br/>
* 4:沒有文件被上傳<br/>
* 5:上傳文件大小為0
*/
//判斷上傳格式
switch ($type){
case 'image/pjpeg':$okType=true;
break;
case 'image/jpeg':$okType=true;
break;
case 'image/gif':$okType=true;
break;
case 'image/png':$okType=true;
break;
default:$okType=false;
break;
}
*************************
上傳注意事項
1、為保證服務器安全,上傳文件應該放在外界無法直接訪問的目錄下,比如放於WEB-INF目錄下。
2、為防止文件覆蓋的現象發生,要為上傳文件產生一個唯一的文件名。
3、為防止一個目錄下面出現太多文件,要使用hash算法打散存儲。
4、要限制上傳文件的最大值。
5、要限制上傳文件的類型,在收到上傳文件名時,判斷后綴名是否合法。
*****************************
代碼簡單示例
<html>
<head>
<meta charset="utf-8">
<title>菜鳥教程(runoob.com)</title>
</head>
<body>
<form action="?add=add" method="post" enctype="multipart/form-data">
<label for="file">文件名:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="提交">
</form>
</body>
</html>
<?php
if(add==$_GET['add']){
if ($_FILES["file"]["error"] > 0)
{
echo "錯誤:" . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "上傳文件名: " . $_FILES["file"]["name"] . "<br>";
echo "文件類型: " . $_FILES["file"]["type"] . "<br>";
echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "文件臨時存儲的位置: " . $_FILES["file"]["tmp_name"];
}
// 允許上傳的圖片后綴
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
echo $_FILES["file"]["size"];
$extension = end($temp); // 獲取文件后綴名
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 204800) // 小於 200 kb
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "錯誤:: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "上傳文件名: " . $_FILES["file"]["name"] . "<br>";
echo "文件類型: " . $_FILES["file"]["type"] . "<br>";
echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "文件臨時存儲的位置: " . $_FILES["file"]["tmp_name"] . "<br>";
// 判斷當期目錄下的 uploads 目錄是否存在該文件
// 如果沒有 uploads 目錄,你需要創建它,upload 目錄權限為 777
if (file_exists("uploads/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " 文件已經存在。 ";
}
else
{
// 如果 upload 目錄不存在該文件則將文件上傳到 upload 目錄下
move_uploaded_file($_FILES["file"]["tmp_name"], "uploads/" . $_FILES["file"]["name"]);
echo "文件存儲在: " . "uploads/" . $_FILES["file"]["name"];
}
}
}
else
{
echo "非法的文件格式";
}
}
?>