首頁  >  文章  >  後端開發  >  PHP如何上傳檔案?看完就明白了!

PHP如何上傳檔案?看完就明白了!

WBOY
WBOY原創
2021-10-19 13:48:503386瀏覽

在之前的文章中為大家帶來了《PHP中怎樣取得和偵測檔案的屬性? (總結分享)》,其中給大家詳細的介紹了PHP中文件屬性的相關知識,這篇文章我們一起來看一下,PHP中我們應該怎樣來上傳文件。希望對大家有幫助!

PHP如何上傳檔案?看完就明白了!

我們在日常生活中常常會遇到例如發個朋友圈上傳一下圖片、寄email附帶檔案之類檔案上傳的步驟,那在我們PHP程式碼中,想要實現文件上傳應該怎麼操作?檔案上傳是PHP檔案系統中十分重要的功能之一,那接下來我們一起來看看應該怎樣去實現這樣的功能。

設定php.ini

#想要使用檔案上傳的功能,首先我們需要設定php .ini,對其中的參數進行合理地設定。那我們先來看看應該要怎麼去找php.ini檔。範例如下:

首先我們輸入:

<?php
phpinfo();
?>

輸出結果:

PHP如何上傳檔案?看完就明白了!

##由上述結果中,在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[&#39;upfile&#39;] as $key => $value) {
            echo $key.&#39;=>&#39;.$value.&#39;<br>&#39;;
        }
    }
?>

執行程式後,依照表單選擇要上傳的文件,我以test1.txt為例,輸出結果為:

PHP如何上傳檔案?看完就明白了!#根據已儲存的資訊我們可以得到該檔案的相關資訊:

檔案名稱為test1.txt;上傳檔案的類型為text/plain;保存上傳檔案的臨時名稱為C:\Windows\phpD16F.tmp;0 則表示上傳檔案成功;檔案的大小為5。

單一檔案上傳透過上面的程式碼,我們已經得到了要上傳檔案的基本信息,接下來我們需要使用

move_uploaded_file()

函數來實作上傳。它的主要功能就是把剛才上傳的檔案移到一個新的位置。它的語法格式如下:<pre class="brush:php;toolbar:false">move_uploaded_file(string $filename, string $destination)</pre>其中

$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[&#39;upfile&#39;][&#39;tmp_name&#39;];     // 临时文件名称
        $name      = $_FILES[&#39;upfile&#39;][&#39;name&#39;];         // 文件的原名称
        $path      = &#39;./phptest&#39;;                       // 上传目录
        $file_name = date(&#39;YmdHis&#39;).rand(100,999).$name;// 避免文件重名,更改文件名称
        if(move_uploaded_file($tmpname, $path.&#39;/&#39;.$file_name)){
            echo $name." 上传成功!";
        }else{
            echo $name." 上传失败!";
        }
    }
?>

依照表單上傳檔案後輸出結果如下:

如此则表示我想要上传的test2.txt已经上传到我需要的目录中了:

PHP如何上傳檔案?看完就明白了!

多文件上传

通过上述示例已经了解了单文件上传的过程,但是在日常使用中经常会用到的是多文件上传,那多文件上传应该怎么操作呢?

示例如下:

还和上面的示例一样,上传多个文件到我在根目录里创建的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[&#39;upfile&#39;][&#39;tmp_name&#39;];
        $name = $_FILES[&#39;upfile&#39;][&#39;name&#39;];
        $path = &#39;./phptest&#39;;
        for ($i=0; $i < count($tmpname); $i++) {
            $file_name = date(&#39;YmdHis&#39;).rand(100,999).$name[$i];
            if(move_uploaded_file($tmpname[$i], $path.&#39;/&#39;.$file_name)){
                echo $name[$i].&#39; 上传成功!<br>&#39;;
            }else{
                echo $name[$i].&#39; 上传失败!<br>&#39;;
            }
        }
    }
?>

输出结果:

PHP如何上傳檔案?看完就明白了!

如此结果显示,多个文件已经上传到我的文件夹里了:

PHP如何上傳檔案?看完就明白了!

推荐学习:《PHP视频教程

以上是PHP如何上傳檔案?看完就明白了!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn