上傳文件我們少不了move_uploaded_file函數本函數檢查并確保由 file 指定的文件是合法的上傳文件(即通過 php 的 http post 上傳機制所上傳的),如果文件合法,則將其移動為由 newloc 指定的文件.
如果 file 不是合法的上傳文件,不會出現任何操作,move_uploaded_file() 將返回 false.
如果 file 是合法的上傳文件,但出于某些原因無法移動,不會出現任何操作,move_uploaded_file() 將返回 false,此外還會發出一條警告.
先來看一個關于在上傳關表單設置:
- <html>
- <head>
- <title>a simple file upload form</title>
- </head>
- <body>
- <form enctype="multipart/form-data"
- action="<?print $_server['php_self']?>" method="post">
- <p>
- <input type="hidden" name="max_file_size" value="102400" />
- <input type="file" name="fupload" /><br/>
- <input type="submit" value="upload!" />
- </p>
- </form>
- </body>
- </html>
這樣我們主設置的上傳文件最大不能超過102400字節了,在php中要實現文件上傳很簡單如下代碼:
- if ( $_files['fupload']['type'] == "image/gif" ) {
- $source = $_files['fupload']['tmp_name'];
- $target = "upload/".$_files['fupload']['name'];
- move_uploaded_file( $source, $target );// or die ("couldn't copy");
- $size = getimagesize( $target );
- $imgstr = "<p><img width="$size[0]" height="$size[1]" ";
- $imgstr .= "src="$target" alt="uploaded image" /></p>";
- print $imgstr;
- }
這樣就ko了,下面我們總結實例:
- <html>
- <form enctype="multipart/form-data" action="" method="post">
- <input type="hidden" name="max_file_size" value="6000000" /> <!--設置允許提交表單的最大字節數-->
- 文件上傳: <input name="file" type="file" />
- <input type="submit" value="上傳"/>
- </form>
- </html>
- <?
- //處理程序
- function extend($file_name) //定義獲取文件的擴展名函數
- {$extend =explode("." , $file_name);
- $va=count($extend)-1;
- return strtolower($extend[$va]);}
- $dirname="../";//是否啟用上一層路徑,格式為:$dirname="../";或$dirname="http://www.cnblogs.com/";等等與$dir組合使用,注意不要溢出根路徑
- $dir='upload/aa/bb';//設定上傳目錄,與上面的$dirname組合
- $file=$_files['file'];//從文件域表單獲取文件
- $filename=$file['name'] ;//獲取文件全名
- $c_filesize=$file['size'] ;//獲取本地的文件大小
- $extendname=extend($filename);//獲取文件擴展名
- if($c_filesize>200000000000)die("文件太大");//限制上傳文件大小, 單位字節
- //if($extendname!="jpg")die("只允許上傳jpg格式的圖片");//限制上傳文件格式,去掉語句開頭的兩斜杠生效
- if(!file_exists($dir));//檢查目錄文件夾是否存在,不存在則建立新文件夾
- {
- $v=split ('[/.-]', $dir);
- for ( $i=0 ; $i <count($v) ; $i++)
- {$dirname=$dirname.$v[$i];
- if(!file_exists($dirname))mkdir($dirname);
- $dirname=$dirname."/";}
- } //目錄創建完畢
- ?>
- <?
- $dest=$dirname.date("ymdhis", time()).rand(100000,999999).".".$extendname; //設置文件名為日期加上從100000到999999的隨機數和擴展名
- if(file_exists($dest))die("該文件已經存在");
- if(move_uploaded_file($file['tmp_name'],$dest)) //調用文件上傳函數
- {$s_filesize=filesize($dest);//獲取服務器端的文件大小
- echo "文件上傳成功,<a href=".$dest.">查看文件地址</a>";
- echo "<br>本地文件名:".$filename;
- echo "<br>遠端文件名:".$dest;
- echo "<br>大 小:".ceil($s_filesize/1024)." kb";
- echo "<br>擴展名:".$extendname;
- echo "<br>大 小:".$c_filesize." byte";}
- else
- {echo "還未進行文件上傳";}
- ?>
總結了文件上傳的錯誤代碼:
upload_err_ok沒有錯誤。
upload_err_ini_size的上傳的文件超過最高價值存在中指定的文件。
upload_err_form_size的上傳的文件超過最高價值所指定的max_file_size隱藏的部件。
upload_err_partial的文件上傳被取消了,只有部分的文件被上傳。
upload_err_nofile沒有文件被上傳.
新聞熱點
疑難解答