您好,登錄后才能下訂單哦!
小編給大家分享一下PHP中怎么樣上傳文件,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
配置php.ini
想要使用文件上傳的功能,首先我們需要配置php.ini,對其中的參數進行合理地設置。那我們先來看一下應該怎樣去找到php.ini文件。示例如下:
首先我們輸入:
<?php phpinfo(); ?>
輸出結果:
由上述結果中,在Loaded Configuration File一欄中可以看到php.ini的具體路徑。由此便找到了php.ini文件。
php.ini中的文件太多可以使用ctrl+F來搜索相關配置項。那我們需要配置的參數如下:
file_uploads
: on,說明服務器開啟了文件上傳功能;如果為 off,則說明服務器關閉了文件上傳功能。
upload_tmp_dir
:上傳文件的臨時目錄。在文件被成功上傳之前,文件首先會存放到服務器端的臨時目錄中,不設置的為系統默認的目錄。
upload_max_filesize
:服務器允許上傳文件的最大值,以MB為單位。
max_execution_time
:PHP 中一個指令所能執行的最大時間,單位是秒。
memory_limit
:PHP 中一個指令所分配的內存空間,單位是 MB。
其中我們需要注意的是:配置完成后想要配置生效的話,需要重啟Apache 服務器,配置的參數才生效。
預定義變量 $_FILES
在我們配置完php.ini之后,我們就需要通過預定義變量$_FILES 來對上傳文件做一些限制和判斷。$_FILES 變量存儲的是上傳文件的相關信息,其需要保存的信息如下:
$_FILES[filename][name]
:保存上傳文件的文件名
$_FILES[filename][size]
: 保存上傳文件的大小
$_FILES[filename][tmp_name]
: 保存上傳文件的臨時名稱
$_FILES[filename][type]
:保存上傳文件的類型
$_FILES[filename][error]
: 保存上傳文件結果的代號,0 則表示成功
我們可以通過預定義變量 $_FILES結合HTML進行示例如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>PHP文件上傳</title> </head> <body> <form action="" method="post" enctype="multipart/form-data"> <input type="file" name="upfile"> <input type="submit" value="上傳"> </form> </body> </html> <?php if(!empty($_FILES)){ foreach ($_FILES['upfile'] as $key => $value) { echo $key.'=>'.$value.'<br>'; } } ?>
運行程序后,根據表單選擇要上傳的文件,我以test1.txt為例,輸出結果為:
根據保存的信息我們可以得出該文件的相關信息:
文件名為test1.txt;上傳文件的類型為text/plain;保存上傳文件的臨時名稱為C:\Windows\phpD16F.tmp;0 則表示上傳文件成功;文件的大小為5。
單文件上傳
通過上面的代碼,我們已經得到了要上傳文件的基本信息,接下來我們需要使用 move_uploaded_file()
函數來實現上傳。它的主要功能就是把剛才上傳的文件移動到一個新的位置。它的語法格式如下:
move_uploaded_file(string $filename, string $destination)
其中$filenameb
表示的是上傳文件的文件名,這個文件名并不是上傳文件的原文件名,而是通過上一步$_FILES中tmp_name得到的文件名;$destinationb
表示的是這個上傳文件要移動到的位置。
執行函數執行成功的話會返回 TRUE,失敗的話返回 FALSE。
接下來我們看一下示例:
把剛才的test1.txt文件上傳到我在根目錄中創建的一個名為phptest的文件夾中,操作如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>PHP文件上傳</title> </head> <body> <form action="" method="post" enctype="multipart/form-data"> <input type="file" name="upfile"> <input type="submit" value="上傳"> </form> </body> </html> <?php if(!empty($_FILES)){ $tmpname = $_FILES['upfile']['tmp_name']; // 臨時文件名稱 $name = $_FILES['upfile']['name']; // 文件的原名稱 $path = './phptest'; // 上傳目錄 $file_name = date('YmdHis').rand(100,999).$name;// 避免文件重名,更改文件名稱 if(move_uploaded_file($tmpname, $path.'/'.$file_name)){ echo $name." 上傳成功!"; }else{ echo $name." 上傳失敗!"; } } ?>
按照表單上傳文件后輸出結果如下:
如此則表示我想要上傳的test2.txt已經上傳到我需要的目錄中了:
多文件上傳
通過上述示例已經了解了單文件上傳的過程,但是在日常使用中經常會用到的是多文件上傳,那多文件上傳應該怎么操作呢?
示例如下:
還和上面的示例一樣,上傳多個文件到我在根目錄里創建的phptest文件夾里
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>PHP文件上傳</title> </head> <body> <form action="" method="post" enctype="multipart/form-data"> <input type="file" name="upfile[]"><br> <input type="file" name="upfile[]"><br> <input type="file" name="upfile[]"><br> <input type="submit" value="上傳"> </form> </body> </html> <?php if(!empty($_FILES)){ $tmpname = $_FILES['upfile']['tmp_name']; $name = $_FILES['upfile']['name']; $path = './phptest'; for ($i=0; $i < count($tmpname); $i++) { $file_name = date('YmdHis').rand(100,999).$name[$i]; if(move_uploaded_file($tmpname[$i], $path.'/'.$file_name)){ echo $name[$i].' 上傳成功!<br>'; }else{ echo $name[$i].' 上傳失敗!<br>'; } } } ?>
輸出結果:
如此結果顯示,多個文件已經上傳到我的文件夾里了:
以上是“PHP中怎么樣上傳文件”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。