在php中上傳圖片我們全結合$_files 與move_uploaded_file函數來一起操作,從而實現從客戶端把文件上傳到服務器端了,下面一起來看看具體的操作子.
編程環境
PHP5.2.4,基本上PHP4.3以上版本,此代碼都可以使用.
準備工作
檢查upload_tmp_dir項
如果PHP的開發環境是自行搭建的,你需要在編寫文件上傳程序前編輯php.ini文件,找到并編輯upload_tmp_dir選項,此項用來設定文件上傳至服務器時的臨時文件夾,比如upload_tmp_dir = E:/phpos/uploads,然后再重啟Apache,如果PHP的開發環境使用的是傻瓜式一鍵安裝包,一般upload_tmp_dir都是設定好了的,你也可以用phpinfo()函數查看下配置.
PHP實例代碼如下:
- <input name="userfile" type="file">
- if (! emptyempty ( $_FILES ['file'] ['name'] )) {
- $img = $this->up_file ( "file" );
- }
- //up_file()函數:
- function up_file($inputname, $destinate = "../data/agency/", $type = "", $maxSize = 0) {
- $arr = explode ( '.', $_FILES [$inputname] ['name'] );
- $count = count ( $arr );
- $typearr = explode ( ',', $type );
- if (! emptyempty ( $type )) {
- if (! in_array ( $arr [$count - 1], $typearr )) {
- $this->show_warning ( '文件類型不允許上傳' );
- exit ();
- }
- }
- if ($maxSize != 0) {
- if (($_FILES [$inputname] ['size'] / 1000) >= $maxSize) {
- $this->show_warning ( '文件大小超過限制' );
- exit ();
- }
- }
- if (! emptyempty ( $destinate )) {
- $destinate = substr ( str_replace ( "", "/", $destinate ), - 1 ) == "/" ? $destinate : $destinate . "/";
- if (! is_writable ( $destinate )) {
- $this->show_warning ( '文件目錄發生錯誤' );
- exit ();
- }
- }
- $filename = date ( "YmdHis" ) . (microtime () * 1000000) . "." . $arr [$count - 1];
- if (is_file ( $destinate . $filename )) {
- up_file ( $inputname, $destinate = "", $type = "", $maxSize = 0 );
- } else {
- $filename = $filename;
- }
- copy ( $_FILES [$inputname] ['tmp_name'], $destinate . $filename );
- @unlink ( $_FILES [$inputname] ['tmp_name'] );
- return $filename;
- }
以上范例中 $_FILES 數組的內容如下所示,我們假設文件上傳字段的名稱為 userfile(名稱可隨意命名)
如何上傳多個文件?比如同時上傳3個文件,只需將如下代碼:
<input name="userfile" type="file"> 改成
<input name="userfile[]" type="file">
<input name="userfile[]" type="file">
<input name="userfile[]" type="file">
對應的在調用此函數時,$_FILES['userfile']['name'][0],代表第一個文件的相關文件信息,依此類推,其他也一樣.
$_FILES['userfile']['name'] 客戶端機器文件的原名稱.
$_FILES['userfile']['type'] 文件的 MIME 類型,需要瀏覽器提供該信息的支持,例如“image/gif”.
$_FILES['userfile']['size'] 已上傳文件的大小,單位為字節。
$_FILES['userfile']['tmp_name'] 文件被上傳后在服務端儲存的臨時文件名。
$_FILES['userfile']['error'] 和該文件上傳相關的錯誤代碼
值:0; 沒有錯誤發生,文件上傳成功。
值:1; 上傳的文件超過了 php.ini 中 upload_max_filesize 選項限制的值。
值:2; 上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值。
值:3; 文件只有部分被上傳。
值:4; 沒有文件被上傳。
上傳大文件失敗的解決辦法:
文件上傳時存放文件的臨時目錄必須是開啟的并且是 PHP 進程所有者用戶可寫的目錄,如果未指定則 PHP 使用系統默認值.
max_execution_time = 90
file_uploads = On
upload_max_filesize = 2M 設定文件上傳的大小的最大值.
新聞熱點
疑難解答