通過PHP將文件上傳到服務器
1、先創建一個上傳表單:index.php
<html>
<head>
<meta charset="utf-8">
<title>PHP實現文件上傳</title>
</head>
<body>
<form action="upload.php" 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>
2、創建上傳腳本
<?php
// 允許上傳的圖片後綴
$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>";
// 判斷當期目錄下的 upload 目錄是否存在該文件
// 如果沒有 upload 目錄,你需要創建它,upload 目錄權限爲 777
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " 文件已經存在。 ";
}
else
{
// 如果 upload 目錄不存在該文件則將文件上傳到 upload 目錄下
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
echo "文件存儲在: " . "upload/" . $_FILES["file"]["name"];
}
}
}
else
{
echo "非法的文件格式";
}
?>
3、另一種實現方法(上傳頭像爲例,思想來自於最近的一個項目)
//實現文件(用戶頭像)的上傳
if($_SESSION['user_id']==''){
//如果用戶的ID爲空,說明沒有登錄
//實現跳轉的兩種方式
header('Location:login.php');
//echo '<script>window.location.href='"login.php"'</script>';
}
print_r($_FILES);
$fileError=''; //錯誤類型
$allowedExit = array( //允許上傳的文件格式
'jpg',
'png',
'gif',
'bmp',
'jpeg',
);
if ($_FILES['face'] == '') { //上傳文件爲空
echo '沒有上傳';
} else {
if ($_FILES['face']['error'] == 0) { //錯誤代碼爲0,表示上傳的文件沒有錯誤
$ext = strtolower(pathinfo($_FILES['face']['name'],PATHINFO_EXTENSION));
//$ext 提取上傳文件的後綴
//strtolower()函數將所有後綴轉化爲小寫
//pathinfo() 函數以數組的形式返回文件路徑的信息
//PATHINFO_DIRNAME - 只返回 dirname(路徑)
// PATHINFO_BASENAME - 只返回 basename(文件名)
// PATHINFO_EXTENSION - 只返回 extension(後綴)
//eg.<?php
//print_r(pathinfo("/testweb/test.txt",PATHINFO_BASENAME));
//輸出:test.txt
print_r($ext);
if (!in_array($ext,$allowExtArray)) {
$fileError .= '上傳格式不被允許';
}else {
if (!is_dir('uploads')) { //判斷uploads文件夾是否存在
mkdir('uploads'); //創建uploads文件夾
}
$newFileName = date('Y-m-d H:i:s',time()).rand(0,100000);//給上傳的文件改名字 以時間爲格式 仿製同一時間傳 後面加一個隨機數
move_uploaded_file($_FILES['face']['tmp_name'],'uploads/'.$newFileName.'.'.$ext);
//move_uploaded_file() 函數將上傳的文件移動到新位置 將要上傳的文件保存到uploads文件夾下
}
} else {
switch ($_FILES['face']['error']) { //如果上傳的文件有錯誤進行報錯
case '1':
$fileError = '上傳文件大小超過服務器允許上傳的最大值';
break;
case '2':
$fileError = '上傳文件大小超過HTML表單中隱藏域MAX_FILE_SIZE選項指定的值';
break;
// 0——沒有錯誤發生,文件上傳成功。
// 1——上傳的文件超過了 php.ini 中 upload_max_filesize 選項限制的值。
// 2——上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值。
// 3——文件只有部分被上傳。
// 4——沒有文件被上傳。
}
echo '發生錯誤:'.$fileError;
}
}
print_r($_SESSION);