編程環境
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()函數查看下配置
html
代碼如下 復制代碼 <input name="userfile" type="file">示例:
代碼如下 復制代碼if (! empty ( $_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 (! empty ( $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 (! empty ( $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 設定文件上傳的大小的最大值