經過 PHP,能夠把文件上傳到服務器。php
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <form action="file.php" method="post" enctype="multipart/form-data"> <input type="file" name="chencheng"> <button type="submit">上傳</button> </body> </html>
將以上代碼保存到 file.html 文件中。html
有關上面的 HTML 表單的一些注意項列舉以下:數組
註釋:容許用戶上傳文件是一個巨大的安全風險。請僅僅容許可信的用戶執行文件上傳操做。瀏覽器
注意:安全
$_FILES["file"]["error"] =0 表示文件上傳成功!!
$_FILES["file"]["error"] =1上傳的文件超過了 php.ini 中 upload_max_filesize 選項限制的值.
$_FILES["file"]["error"] =2上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值。
$_FILES["file"]["error"] =3文件只有部分被上傳
$_FILES["file"]["error"] =4沒有文件被上傳
$_FILES["file"]["error"]>0 表示文件上傳錯誤!!!服務器
file.php函數
<?php if($_FILES["chencheng"]["error"] > 0){ echo "錯誤:".$_FILES["chencheng"]["error"]."<br>" } else { echo "上傳文件名爲:".$_FILES["chencheng"]["name"]."<br>" echo "文件類型:".$_FILES["chencheng"]["type"]."<br>" echo "文件大小:".$_FILES["chencheng"]["size"]."<br>" echo "文件臨時存儲的位置:".$_FILES["chencheng"]["tmp_name"]."<br>" } ?>
經過使用 PHP 的全局數組 $_FILES,你能夠從客戶計算機向遠程服務器上傳文件。post
第一個參數是表單的 input name,第二個下標能夠是 "name"、"type"、"size"、"tmp_name" 或 "error"。以下所示:編碼
$_FILES["file"]["name"] - 上傳文件的名稱spa
$_FILES["file"]["type"] - 上傳文件的類型
$_FILES["file"]["size"] - 上傳文件的大小,以字節計
$_FILES["file"]["tmp_name"] - 存儲在服務器的文件的臨時副本的名稱即位置
$_FILES["file"]["error"] - 由文件上傳致使的錯誤代碼
這是一種很是簡單文件上傳方式。基於安全方面的考慮,您應當增長有關容許哪些用戶上傳文件的限制。
在這個腳本中,咱們增長了對文件上傳的限制。用戶只能上傳 .gif、.jpeg、.jpg、.png 文件,文件大小必須小於 200 kB:
<?php $allowedExts = array("gif","jpeg","jpg","png"); $tmp = explode(".",$_FILES["file"]["name"]); $extension = end($tmp); var_dump($extension);// 獲取文件後綴名 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"]; } } else { echo "非法的文件格式"; } ?>
上面的實例在服務器的 PHP 臨時文件夾中建立了一個被上傳文件的臨時副本。
這個臨時的副本文件會在腳本結束時消失。要保存被上傳的文件,咱們須要把它拷貝到另外的位置:
<?php $allowedExts = array("gif","jpeg","jpg","png"); $tmp = explode(".",$_FILES["file"]["name"]); $extension = end($tmp);// 獲取文件後綴名 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>"; if ( file_exists("upload/".$_FILES["file"]["name"]) ) { echo $_FILES["file"]["name"]."文件已經存在"; } else { move_uploaded_file( $_FILES["file"]["tmp_name"],"upload/".$_FILES["file"]["name"] ); echo "文件儲存在:"."upload/".$_FILES["file"]["name"]; } } } else { echo "非法的文件格式"; } ?>
如何解決兩個不一樣的用戶上傳了一個名稱相同的文件、圖片而產生了相同文件保存路徑這個問題呢?
<?php $allowedExts = array("gif","jpeg","jpg","png"); $tmp = explode(".",$_FILES["file"]["name"]); $extension = end($tmp);// 獲取文件後綴名 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_path = "upload/.".time().rand().".".end($tmp); move_uploaded_file( $_FILES["file"]["tmp_name"],$upload_path ); echo "文件儲存在:".$upload_path; } } else { echo "非法的文件格式"; } ?>
以上操做中用到的PHP函數總結:
1. rand()
2. end(),current();
3.file_exsits()
4.explode()