<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                [TOC] # 文件上傳 ### 客戶端上傳設置 * 在B/S程序中文件上傳已經成為一個常用功能。其目的是客戶可以通過瀏覽器(Browser)將文件上傳到服務器(Server)上的指定目錄。 * PHP中文件上傳的基礎知識: 客戶端form表單 服務器端對上傳文件的操作 ``` 客戶端文件上傳的form表單: <html> <head><title>文件上傳</title></head> <body> <form action="upload.php" method="post" enctype="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="1000000"> 選擇文件:<input type="file" name="myfile"> <input type="submit" value="上傳文件"> </form> </body> </html> ``` 注意幾個特征屬性: * POST方法: 表單最常用的功能,向目標頁面傳遞變量,我們在上傳文件的時候,會在表單中設置相應的屬性,來完成文件的傳遞 * enctype="multipart/form-data" 這樣服務器就會知道,我們要傳遞一個文件,這樣服務器可以知道上載的文件帶有常規的表單信息。 * MAX_FILE_SIZE 此字段必須在文件輸入字段之前,控制最大的傳遞文件的大小(字節) * 設置瀏覽器文件輸入瀏覽按鈕 ``` <input type="file" name="userfile"> ``` ### 在服務器端通過PHP處理上傳 上傳文件的接收和處理是通過PHP腳本來處理的,具體需要通過以下三個方面信息: * 設置PHP配置文件中的指令:用于精細地調節PHP的文件上傳功能。 ###### PHP配置文件中與文件上傳有關的選項: | 指令名 | 默認值 | 功能描述 | | --- | --- | --- | | file_uploads | ON | 是否開啟文件上傳 | | upload_max_filesize | 2M | 限制PHP處理上傳文件大小的最大值,此值必須小于post_max_size | | post_max_size | 8M | 限制通過POST方法可以接受信息的最大值,也就是整個POST請求的提交值。此值必須大于upload_max_filesize | | upload_tmp_dir | NULL | 上傳文件存放的臨時路徑,可以是絕對路徑。默認NULL則使用系統的臨時目錄 | * $_FILES多維數組:用于存儲各種與上傳文件有關的信息,其他數據還是使用$_POST獲取。 ###### 超級全局數組`$_FILES` * $_FILES["myfile"]["name"]中的值是: 客戶端文件系統的文件的名稱 * $_FILES["myfile"]["type"]中的值是: 客戶端傳遞的文件的類型 * $_FILES["myfile"]["size"]中的值是: 文件的字節的大小 * $_FILES["myfile"]["tmp_name"]中的值是: 文件被上傳后在服務器存儲的臨時全路徑 * $_FILES["myfile"]["error"]中的值是: 文件上傳的錯誤代碼-php 4.2以后增加的功能 ###### 存儲在`$_FILES["myfile"]["error"]`中的值 伴隨文件上傳時產生的錯誤信息代碼是在PHP4.2.0版本中引入的,具體如下: * 值為0:表示沒有發生任何錯誤。對應常量的值 `UPLOAD_ERR_OK` * 值為1:表示上傳文件的大小超出了約定值。文件大小的最大值是在PHP配置文件中指定的,該指令是:upload_max_filesize。對應常量的值 `UPLOAD_ERR_INI_SIZE` * 值為2:表示上傳文件大小超出了HTML表單隱藏域屬性的MAX_FILE_SIZE元素所指定的最大值。對應常量的值 `UPLOAD_ERR_FORM_SIZE` * 值為3:表示文件只被部分上傳。對應常量的值 `UPLOAD_ERR_PARTIAL` * 值為4:表示沒有上傳任何文件。對應常量的值 `UPLOAD_ERR_NO_FILE` * 值為6:表示找不到臨時文件夾。PHP 4.3.10 和 PHP 5.0.3 引進。對應常量的值 `UPLOAD_ERR_NO_TMP_DIR` * 值為7:表示文件寫入失敗。PHP 5.1.0 引進。對應常量的值 `UPLOAD_ERR_CANT_WRITE` 常見的數據格式 |文件類型| MIME類型| | --- | --- | |圖片文件| image/gif,image/jpg,image/jpeg,image/png,image/x-png| |純文本和HTML| text/txt,text/plain,text/html| |二進制文件| application/octet-stream| |音頻格式| audio/basic| |視頻格式| video/mpeg| ###### PHP的文件上傳處理函數:用于上傳文件的后續處理。 上傳成功的文件會被放置到服務器端臨時目錄下,文件名是隨機生成的臨時文件名。 > 注意:該文件在程序執行完后將自動被刪除掉。在刪除前可以像本地文件一樣操作。 文件上傳處理函數: * `is_uploaded_file` —判斷文件是否是通過 HTTP POST 上傳的 ``` 格式:bool is_uploaded_file ( string $filename ) ``` * `move_uploaded_file` — 將上傳的文件移動到新位置 ``` 格式:bool move_uploaded_file ( string $filename , string $destination ) ``` > 注意:如果目標文件已經存在,將會被覆蓋。 ### 上傳代碼示例 ``` <?php $allowtype = array("gif", "png", "jpg"); //設置充許上傳的類型為gif, png和jpg $size = 1000000; //設置充許大小為1M(1000000字節)以內的文件 $path = "./uploads"; //設置上傳后保存文件的路徑 //1. 判斷文件是否可以成功上傳到服務器,$_FILES['myfile']['error'] 為0表示上傳成功 if($_FILES['myfile']['error'] > 0) { echo '上傳錯誤: '; switch ($_FILES['myfile']['error']) { case 1: die('上傳文件大小超出了PHP配置中的約定值:upload_max_filesize'); case 2: die('上傳文件大小超出了表單中的約定值:MAX_FILE_SIZE'); case 3: die('文件只被部分上載'); case 4: die('沒有上傳任何文件'); case 6: die('找不到臨時文件夾'); case 7: die('文件寫入失敗'); default: die('末知錯誤'); } } //2. 判斷上傳的文件是否為充許的文件類型,通過文件的后綴名 $hz = array_pop(explode(".", $_FILES['myfile']['name'])); //3.通過判斷文件的后綴方式,來決定文件是否是充許上傳的文件類型 if(!in_array($hz, $allowtype)) { die("這個后綴是<b>{$hz}</b>,不是充許的文件類型!"); } //4. 判斷上傳的文件是否為充許大小 if($_FILES['myfile']['size'] > $size ) { die("超過了充許的<b>{$size}</b>字節大小"); } //5. 為了系統安全,也為了同名文件不會被覆蓋,上傳后將文件名使用系統定義 $filename = date("YmdHis").rand(100,999).".".$hz; //6. 判斷是否為上傳文件 if (is_uploaded_file($_FILES['myfile']['tmp_name'])) { if (!move_uploaded_file($_FILES['myfile']['tmp_name'], $path.'/'.$filename)) { die('問題: 不能將文件移動到指定目錄。'); } }else{ die("問題: 上傳文件{$_FILES['myfile']['name']}不是一個合法文件: "); } //7. 如果文件上傳成功則輸出 echo "文件{$upfile}上傳成功,保存在{$path}中,大小為{$_FILES['myfile']['size']}字節"; ?> ``` # 多文件上傳 當需要上傳多個文件的情況,有兩種實現的解決方法: * 使用不同的表單元素 ``` <input type="file" name="file_a"> <input type="file" name="file_b"> <input type="file" name="file_b"> ``` * 使用數組格式的表單元素 ``` <input type="file" name="file[]"> <input type="file" name="file[]"> <input type="file" name="file[]"> ``` # 文件下載 ``` <?php //文件下載練習 $filename="./upload/aa.png"; $basename=pathinfo($filename); header("Content-Type: image/png"); //指定下載文件類型的 header("Content-Disposition:attachment;filename=". $basename["basename"]); //指定下載文件的描述信息 header("Content-Length:".filesize($filename)); //指定文件大小的 readfile($filename);//將內容輸出,以便下載。 ?> ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看