<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## **文件的上傳下載** **對于上傳文件的判斷需要考慮到的問題** >[danger]1. 構建臨時文件 >2. 判斷是否是HTTP POST上傳的 >3. 判斷是否有錯誤 >4. 判斷文件大小 >5. 獲取文件擴展名 開啟php_fileinfo.dll擴展 獲取mime類型 >6. 判斷文件類型 >7. 構建目標文件 **注意:對于表單上傳文件必須的屬性** >[danger]1. method 屬性 :必須是 method='post' >2. enctype 屬性 :對上傳文件進行編碼處理 :enctype ='multipart/form-data' **容易出錯的地方** **MAX_FILE_SIZE**:` <input type="hidden" name="MAX_FILE_SIZE" value="2048" />`不能大于 ini 設置中upload_max_filesize選項設置的值。 >[danger]**MAX_FILE_SIZE**可以避免等一個大文件傳上服務器以后才發現超過限制了,在上傳之初就提示用戶 **IE**和**FireFox**這兩個主流瀏覽器都不支持這個特性 **upload_max_filesize**:上傳單個文件的最大限制(默認2M) **post_max_size**:POST的數據最大字節長度(默認8M);如果post_max_size設置的值太小,則較大的文件會無法被上傳。因此,請保證*post_max_size*的值足夠的大。 **memory_limit**:最大的內存消耗(默認128M) >[danger]如果內存限制設置被激活,可能需要將[memory_limit](http://php.net/manual/zh/ini.core.php#ini.memory-limit)設置的更大些(默認128M),upload_max_filesize與post_max_size不要超過memory_limit的值 **max_file_uploads**:上傳文件數量(默認20) 如果[max_execution_time](http://php.net/manual/zh/info.configuration.php#ini.max-execution-time)(腳本執行的最大時間,默認30s)設置的值太小,腳本運行的時間可能會超過該設置。因此,也請保證*max_execution_time*足夠的大。 >[danger] **注意**:[max\_execution\_time](http://php.net/manual/zh/info.configuration.php#ini.max-execution-time)僅僅只影響腳本本身運行的時間。任何其它花費在腳本運行之外的時間,諸如用函數[system()](http://php.net/manual/zh/function.system.php)對系統的調用、[sleep()](http://php.net/manual/zh/function.sleep.php)函數的使用、數據庫查詢、文件上傳等,在計算腳本運行的最大時間時都不包括在內。 **Warning** [max_input_time](http://php.net/manual/zh/info.configuration.php#ini.max-input-time)以秒為單位設定了腳本接收輸入(類似get、post)的最大時間,包括文件上傳。對于較大或多個文件,或者用戶的網速較慢時,可能會超過默認的*60 秒*。 不對正在操作的文件進行驗證可能意味著用戶能夠訪問其它目錄下的敏感信息。 確保php.ini的配置file_uploads是開啟的`file_uploads = On` ~~~ <html> <body> <form action="upload_file.php" method="post" enctype="multipart/form-data"> <label for="file">Filename:</label> <input type="file" name="file" id="file" /> <input type="hidden" name="MAX_FILE_SIZE" value="2000" /> <br /> <input type="submit" name="submit" value="Submit" /> </form> </body> </html> ~~~ upload\_file.php: ~~~ var_dump($_FILES);//array(1) { ["fieldname"]=> array(5) { ["name"]=> string(5) "1.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(24) "D:\xampp\tmp\phpACE5.tmp" ["error"]=> int(0) ["size"]=> int(13789) } } ?if(is_uploaded_file($tmp_name = $_FILES['fieldname']['tmp_name'])){? $newdirpath = dirname(__FILE__); $name=$_FILES['fieldname']['name']; $name = time().'xxxxx'.$name; move_uploaded_file($tmp_name, "$newdirpath/$name"); ?} ~~~ 保存臨時文件:move_uploaded_file 當上傳文件時php會將會生成一個臨時文件,但執行完畢時會將這個臨時文件刪除,所以我們需要move_uploaded_file永久保存上傳的文件 is_uploaded_file() 函數判斷指定的文件是否是通過 HTTP POST 上傳的 windows10的temp文件可能有權限問題,若有,需要修改上傳臨時文件地址 修改上傳的臨時文件地址 修改php.ini中的upload\_tmp\_dir的文件目錄 單文件上傳 ``` <?php //var_dump($_FILES); $rootpath = 'http://localhost/atest/php/head'; //構建臨時文件并quiet判斷是否是http post上傳 if(is_uploaded_file($tmp_name = $_FILES['fieldname']['tmp_name'])){ //判斷錯誤 if($_FILES['fieldname']['error'] !=0){ switch ($_FILES['fieldname']['error']) { case 1: echo '上傳到文件超過了php.ini中設置的upload_max_filesize的值'; break; case 2: echo '上傳的文件大小超過了HTML表單中MAX_FILE_SIZE選項限定的值'; break; case 3: echo '文件只有部分被上傳'; break; case 4: echo '沒有文件被上傳'; break; case 6: echo '找不到臨時文件'; break; case 7: echo '文件寫入失敗'; break; default: echo '未知錯誤!'; break; } } //判斷文件大小get_cfg_var或者ini_get都可以獲取到ini的配置 $upload_max_filesize=get_cfg_var('upload_max_filesize');//上傳允許的單文件的最大值 $post_max_size=ini_get('post_max_size');//上傳所有文件字節允許的最大值 $max_file_uploads=ini_get('max_file_uploads');//上傳文件的允許最大數量 if($_FILES['fieldname']['size'] > return_bytes($upload_max_filesize)){ echo '文件的大小超過了上傳允許的單文件的最大值'; } //設置允許上傳的文件類型 $arr_ext = ['image/jpeg','image/png','application/zip']; //利用php_fileinfo.dll對MIME類型進行嚴格檢查在php.ini開啟 $fs = finfo_open(FILEINFO_MIME_TYPE);// 創建一個返回 mime 類型的資源 $mime = finfo_file($fs,$_FILES['fieldname']['tmp_name']);//返回上傳臨時文件的mime類型 // 判斷是否包括當前文件類型 if (!in_array($mime,$arr_ext)) { die('上傳的文件類型錯誤'); } //獲取文件擴展名:至少有7種以上的方法自行百度 $ext = strchr($_FILES['fieldname']['name'],'.'); $customdir=strtotime(date('Y-m-d',time())); $newdirpath = dirname(__FILE__).'/uploads/'.$customdir; //判斷文件夾是否存在不存在新建他 if(!is_dir($newdirpath)){ $re = mkdir($newdirpath,0777,true); if(!$re){ die('目錄新建不成功'); } } //$name=$_FILES['fieldname']['name'];原文件名 $newname =uniqid().$ext; $uploadfile=$newdirpath.'/'.$newname; //移動臨時文件并保存為永久文件 $result = move_uploaded_file($tmp_name, $uploadfile); if(!$result){ die('上傳移動臨時文件失敗!!'); }else{ echo '上傳成功'; var_dump($uploadfile); echo '<div><img src=./uploads/'.$customdir.'/'.$newname.'></div>'; } }else{ header('location:http://localhost/atest/php/head/'); die('請上傳文件!'); } /** * [return_bytes 返回給定的字節] * 注意這里的swith沒有break;他會重命中的時候一直執行下去 * @param [string] $val [給定的k(千字節), M,G,...] * @return [int] [返回字節整數] */ function return_bytes($val) { //取出空格 $val = trim($val); //獲取字符串最后一個索引并且strtolower轉小寫 $last = strtolower($val[strlen($val)-1]); switch($last) { case 'g': $val *= 1024; case 'm': $val *= 1024; case 'k': $val *= 1024; } return $val; } ``` **多文件上傳** ``` <?php $rootpath = 'http://localhost/atest/php/head'; if($_FILES['fieldname']){ $fieldname=$_FILES['fieldname']; if(count($fieldname['tmp_name']) > 1){ $upload_max_filesize=get_cfg_var('upload_max_filesize');//上傳允許的單文件的最大值 $post_max_size=ini_get('post_max_size');//上傳所有文件字節允許的最大值 $max_file_uploads=ini_get('max_file_uploads');//上傳文件的允許最大數量 //設置允許上傳的文件類型 $arr_ext = ['image/jpeg','image/png','application/zip']; //利用php_fileinfo.dll對MIME類型進行嚴格檢查在php.ini開啟 $fs = finfo_open(FILEINFO_MIME_TYPE);// 創建一個返回 mime 類型的資源 $customdir=strtotime(date('Y-m-d',time())); $newdirpath = dirname(__FILE__).'/uploads/'.$customdir; //判斷文件夾是否存在不存在新建他 if(!is_dir($newdirpath)){ $re = mkdir($newdirpath,0777,true); if(!$re){ die('目錄新建不成功'); } } //隨便循環一個將 三維數組變為2維 以得到key $totalsize=''; foreach ($fieldname['tmp_name'] as $key => $tmpfile) { //判斷是否是HTTP POST上傳的 if(is_uploaded_file($fieldname['tmp_name'][$key])){ //判斷錯誤 if($_FILES['fieldname']['error'][$key] !=0){ switch ($_FILES['fieldname']['error']) { case 1: echo $fieldname['name'][$key].'上傳到文件超過了php.ini中設置的upload_max_filesize的值'; break; case 2: echo $fieldname['name'][$key].'上傳的文件大小超過了HTML表單中MAX_FILE_SIZE選項限定的值'; break; case 3: echo $fieldname['name'][$key].'文件只有部分被上傳'; break; case 4: echo $fieldname['name'][$key].'沒有文件被上傳'; break; case 6: echo $fieldname['name'][$key].'找不到臨時文件'; break; case 7: echo $fieldname['name'][$key].'文件寫入失敗'; break; default: echo $fieldname['name'][$key].'未知錯誤!'; break; } } //構建臨時文件 $tmp_file=$tmpfile; //判斷文件大小get_cfg_var或者ini_get都可以獲取到ini的配置 if($fieldname['size'][$key] > return_bytes($upload_max_filesize)){ echo '文件的大小超過了上傳允許的單文件的最大值'; } if(count($fieldname['tmp_name']) > return_bytes($max_file_uploads)){ echo '文件數量超過上傳文件的允許最大數量'; } $totalsize += $fieldname['size'][$key]; //返回上傳臨時文件的mime類型 $mime = finfo_file($fs,$tmpfile); // 判斷是否包括當前文件類型 if (!in_array($mime,$arr_ext)) { die('上傳的'.$fieldname['name'][$key].'文件類型錯誤'); } //獲取文件擴展名:至少有7種以上的方法自行百度 $ext = strchr($fieldname['name'][$key],'.'); //$name=$_FILES['fieldname']['name'];原文件名 $newname =uniqid().$ext; $uploadfile=$newdirpath.'/'.$newname; //移動臨時文件并保存為永久文件 $result = move_uploaded_file($tmpfile, $uploadfile); if(!$result){ die('上傳移動臨時文件失敗!!'); }else{ echo '上傳成功'; var_dump($uploadfile); echo '<div><img src=./uploads/'.$customdir.'/'.$newname.'></div>'; } }else{ header('location:http://localhost/atest/php/head/'); die('非法文件'); } } if($totalsize > return_bytes($post_max_size)){ echo '所有上傳文件的大小超過了允許的最大值'; } }else{ die('多文件上傳不應該出現的這個未知錯誤'); } }else{ header('location:'.$rootpath); } /** * [return_bytes 返回給定的字節] * 注意這里的swith沒有break;他會重命中的時候一直執行下去 * @param [string] $val [給定的k(千字節), M,G,...] * @return [int] [返回字節整數] */ function return_bytes($val) { //取出空格 $val = trim($val); //獲取字符串最后一個索引并且strtolower轉小寫 $last = strtolower($val[strlen($val)-1]); switch($last) { case 'g': $val *= 1024; case 'm': $val *= 1024; case 'k': $val *= 1024; } return $val; } ```
                  <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>

                              哎呀哎呀视频在线观看