亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

菜鳥的眼光淺談php上傳文件

2020-03-22 19:51:12
字體:
來源:轉載
供稿:網友
  • 本人菜鳥一枚,以下內容如有不當之處,勞煩指正。

    本人由于想寫個discuz插件,這個插件功能上涉及到上傳文件這一功能,故以菜鳥的眼光來學習了下php上傳文件。

    首先,w3cshool查了下案例,覺得他說的非常詳細,連我這個菜鳥都略懂了一二。

    貼上地址:http://www.w3school.com.cn/php/php_file_upload.asp

    照著這個講解,寫了下他這個demo,貼上代碼:

    html:

    <form action="demo.php" method="post" enctype="multipart/form-data">    <label for="file">Filename:</label>    <input type="file" name="file" id="file">    <br/>    <input type="submit" name="submit" value="Submit"/></form>

    這個表單頁,作為php菜鳥的我說下我在這個里面學到的新東西:

    1.form的屬性enctype,百度翻譯了下這個單詞,才知道,這個是encode type 的縮寫,就是指定往服務器傳遞信息的編碼格式;

    2.input的type屬性file,這個專用文件上傳的;

    php:

    //echo phpinfo();//var_dump($_FILES);die;if((($_FILES["file"]["type"]=="image/gif")||($_FILES["file"]["type"]=="image/jpeg")||($_FILES["file"]["type"]=="image/pjpeg")) && ($_FILES["file"]["size"]<100*1024*1024)){    if($_FILES["file"]["error"]>0){        echo "Error: ".$_FILES["file"]["error"]."<br/>";    }else{        echo "Upload: ".$_FILES["file"]["name"]."<br/>";        echo "Type: ".$_FILES["file"]["type"]."<br />";        echo "Size: ".($_FILES["file"]["size"]/1024)."Kb<br />";        echo "Stored in ".$_FILES["file"]["tmp_name"];    }        if(file_exists("upload/".$_FILES["name"]["name"])){        echo $_FILES["file"]["name"]."already exists.";    }else{        move_uploaded_file($_FILES["file"]["tmp_name"],"upload/".$_FILES["file"]["name"]);        echo "Stored in: "."upload/".$_FILES["file"]["name"];    }}else{    echo "Invalid file";}

    關于調試這個demo的時候,我遇到一個問題:就是運行這個demo的時候php報出warning,表示上傳不成功。

    這個時候我就想打印出$_FILES這個變量來看看,結果打印出來發現error=1;才知道上傳的文件超過了php.ini的上傳文件大小,導致上傳失敗。

    這里說下俺新了解的知識點:

      
      PHP編程語言中的常見的$_FILES 系統函數用法有:  $_FILES['myFile']['name'] 顯示客戶端文件的原名稱?! ?_FILES['myFile']['type'] 文件的 MIME 類型,例如"image/gif"?! ?_FILES['myFile']['size'] 已上傳文件的大小,單位為字節。  $_FILES['myFile']['tmp_name'] 儲存的臨時文件名,一般是系統默認?! ?_FILES['myFile']['error'] 該文件上傳相關的錯誤代碼。以下為不同代碼代表的意思:  0; 文件上傳成功?! ?; 超過了文件大小php.ini中即系統設定的大小。  2; 超過了文件大小  MAX_FILE_SIZE 選項指定的值。  3; 文件只有部分被上傳?! ?; 沒有文件被上傳?! ?; 上傳文件大小為0。
    到這里,應該就知道了我剛剛運行demo的錯誤是啥導致的,那既然發現是php.ini里面限制超出了,那接下來我就修改了下php.ini的配置??偨Y下我修改這個php.ini上傳限制的感受:首先,要修改php上傳文件大小限制,那要改php.ini里面的兩個參數,一個是upload_max_filesize,還有個就是post_max_size,修改下這兩個參數的大小就可以了!其次,就是找準php.ini的位置,我由于本地電腦搭建的是集成環境,所以php.ini在apache文件夾下面,如果是自己搭建的環境,那就在php文件夾下面,如果找不到,echo下phpinfo(),可以看到php.ini文件的位置。那到此為止,跟我差不多的新手們就能運行w3cshool上面的demo了,完成上傳實例了。關于上傳文件,我看了下discuz其他插件作者開發的插件,有點小收獲,貼上來跟大家分享下:
       $fileTypes  = array('mp3','wav');    //定義允許上傳的文件類型    $result     = null;    $uploadDir  = './mail';        //上傳路徑    if(!submitcheck($_POST['formhash4'])){    //檢測是否是上傳文件        if($_POST['upname']==''){    //判斷上傳文件的命名是否為空            $result=lang('plugin/saya_mails', 'noname');        }else{                $myfile = $_FILES['myfile'];    //獲取上傳的文件信息                $myfileType = substr($myfile['name'], strrpos($myfile['name'], ".") + 1);    //兩種獲取上傳文件的后綴名            //    $myfileTyle = substr(strrchr($myfile['name'],'.'),1);                if ($myfile['size'] > 1024*1024*1024) {    //判斷上傳文件大小是否超過限制                    $result = lang('plugin/saya_mails', 'big');                } else if (!in_array($myfileType, $fileTypes)) {    //判斷是否是允許上傳的類型                    $result = lang('plugin/saya_mails', 'type');                } elseif (is_uploaded_file($myfile['tmp_name'])) {    //判斷是否是通過HTTP post上傳的文件                    $toFile = './source/plugin/saya_mails/mail/' . $myfile['name'];        //目標存儲地址                    if (@move_uploaded_file($myfile['tmp_name'], $toFile)) {    //將文件拷貝到目標存儲地址     //這個地方加@是屏蔽錯誤信息和警告//                    if (copy($myfile['tmp_name'],$toFile)) {                        $end=0;                        $result = lang('plugin/saya_mails', 'success');                      } else {                        $result = lang('plugin/saya_mails', 'unknow');                    }                } else {                    $result = lang('plugin/saya_mails', 'big');                }    }  }

    對比了下,w3cshool上面的上傳實例,覺得這個作者寫的更完善一點

    大體流程就是:

      1.判斷是否是上傳文件,他用的這個方法是discuz自帶的,我們一般用,就是form傳遞過來的隱藏參數的值存不存在來進行判斷;

      2.判斷上傳文件的命名是否為空,這一步大家可以跳過,這個是他自己寫了個input而已;

      3.判斷上傳大小是否超出;

      4.獲取文件后綴名,判斷是否是允許的上傳文件類型;

      5.判斷文件是否是通過http post上傳的;

      6.移動保存文件;

    關于以上流程,個人總結了下自己獲得的新的知識點:

      1.關于獲取文件的后綴名,原插件作者是通過函數strrpos()來返回"."所在的位置,然后通過截取函數substr()來獲得上傳文件的后綴。

       這里,strrpos()函數,我自己的理解應該是string return position的縮寫,當然我還沒查證過!這個函數是返回字符串里要查找的字符串最后出現的位置,并返回這個位置。也就是從后往前查,第一次出現的位置。參考地址:http://www.w3school.com.cn/php/func_string_strrpos.asp

       這里原作者用這個方法來判斷,肯定是可以的,我百度了下,發現也可以用strrchr()和substr()函數合作來實現這個方法,我把我想的方法注釋在了上面源代碼里面了,其實差不多,strrchr()函數就是返回最后一次出現的要查找的字符串到結尾的字符串,參考地址:http://www.w3school.com.cn/php/func_string_strrchr.asp

       通過以上兩種方法來判斷上傳文件的類型是否達標,而不是通過$_FILES["file"]["type"]來判斷,這樣更好判斷點,對于新手,因為只要你打印下$_FILES這個參數你就知道了,type屬性沒這么判斷來的清晰明了。

      2.通過is_uploaded_file()來判斷文件是否是通過http上傳的

      3.move_uploaded_file()前面的@是用來屏蔽錯誤信息和警告的

    到此為止是小弟的一些個人理解,不足忘指正!

    PHP編程

    鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
    欧美交受高潮1| 国产精品wwwwww| 日韩中文理论片| 国产综合久久久久久| 国产日韩av高清| 国产精品自拍小视频| 91国产中文字幕| 亚洲va久久久噜噜噜久久天堂| 亚洲欧美激情四射在线日| 色哟哟亚洲精品一区二区| 精品香蕉在线观看视频一| 欧美日本国产在线| 日韩视频第一页| 日韩高清av一区二区三区| 亚洲精品自拍偷拍| 亚洲区中文字幕| 亚洲免费av网址| 久久久91精品| 国产精品视频成人| 热久久免费国产视频| 上原亚衣av一区二区三区| 国产视频久久网| 精品亚洲一区二区三区在线观看| 久久躁日日躁aaaaxxxx| 欧美极品美女电影一区| 久久久久久久久亚洲| 日韩在线观看高清| 国产精品羞羞答答| 91精品国产综合久久香蕉| 欧美大奶子在线| 性金发美女69hd大尺寸| 欧美成人国产va精品日本一级| 亚洲精品在线视频| 亚洲无av在线中文字幕| 国产精品久久久久久久久影视| 国内精品免费午夜毛片| 亚洲美女黄色片| 美女久久久久久久久久久| 亚洲精品国产综合区久久久久久久| 欧美理论电影在线观看| 欧美电影免费观看网站| 中文一区二区视频| 国产精品自在线| 欧美第一淫aaasss性| 欧美亚洲日本网站| 69视频在线播放| 欧美精品在线播放| 97香蕉超级碰碰久久免费的优势| 国产做受高潮69| 国产午夜一区二区| 91国语精品自产拍在线观看性色| 亚洲国产精品久久久久秋霞蜜臀| 午夜精品99久久免费| 久久亚洲精品国产亚洲老地址| 国产精品aaaa| 久久久久99精品久久久久| 97久久精品人搡人人玩| 国产精品色视频| 久久久久久97| 亚洲欧洲日产国码av系列天堂| 免费成人高清视频| 欧美日韩一区二区免费在线观看| 精品夜色国产国偷在线| 欧美高清一级大片| 91网在线免费观看| 久久人人爽人人爽人人片亚洲| 亚洲丁香婷深爱综合| 91精品国产乱码久久久久久久久| 欧美精品午夜视频| 国产亚洲精品久久久久久| 57pao精品| 国产精品免费久久久久影院| 91在线精品播放| 欧美最猛性xxxx| 亚洲最新中文字幕| 97超碰国产精品女人人人爽| 亚洲成年人在线播放| 精品久久久久久久久久| 性欧美xxxx视频在线观看| 隔壁老王国产在线精品| 久久久这里只有精品视频| 久久精品91久久香蕉加勒比| 韩国v欧美v日本v亚洲| 中文国产成人精品久久一| 国产精品久久久久久久久男| 亚洲精品国产精品久久清纯直播| 国产精品成人久久久久| 亚洲新声在线观看| 欧美性受xxxx黑人猛交| 国产精品视频中文字幕91| 日韩欧美高清视频| 俺也去精品视频在线观看| 5252色成人免费视频| 日韩av高清不卡| 992tv在线成人免费观看| 欧美成人精品在线| 欧美成年人视频网站欧美| 国产日韩在线看| 精品毛片网大全| 国产精品爽爽爽| 成人网中文字幕| 日本亚洲欧美成人| 精品综合久久久久久97| 欧美性一区二区三区| 日韩在线高清视频| 伊人一区二区三区久久精品| 久久综合九色九九| 国内精品中文字幕| 精品亚洲aⅴ在线观看| 国产精品久久久91| 国产专区欧美专区| www.美女亚洲精品| 久热精品视频在线| 久久免费视频在线| 欧美国产欧美亚洲国产日韩mv天天看完整| 中文字幕在线看视频国产欧美| 亚洲一区二区精品| 亚洲aⅴ日韩av电影在线观看| 成人激情黄色网| 亚洲一区二区三区四区在线播放| 国产精品免费久久久久影院| 综合网中文字幕| 亚洲午夜激情免费视频| 欧美日韩在线观看视频| 欧美精品久久久久久久| 精品亚洲一区二区三区在线播放| 成人激情在线观看| 日韩成人av网址| 成人伊人精品色xxxx视频| 国产精品久久久久久久久久东京| 久久夜色撩人精品| 91免费的视频在线播放| 国产婷婷成人久久av免费高清| 日本19禁啪啪免费观看www| 北条麻妃一区二区三区中文字幕| 欧美国产日韩xxxxx| 国产原创欧美精品| 久久免费视频观看| 91在线高清视频| 日韩专区中文字幕| 91精品国产自产在线观看永久| 久久亚洲电影天堂| 欧美电影在线免费观看网站| 成人免费高清完整版在线观看| 国内精品国产三级国产在线专| 91在线免费观看网站| 国产一区二区三区在线播放免费观看| 欧美日韩在线另类| 久久天堂电影网| 亚洲欧洲美洲在线综合| 久久久久久久久综合| 欧美激情视频一区二区| 亚洲一区二区三区四区视频| 国产精品福利小视频| 亚洲精品福利视频| 色婷婷亚洲mv天堂mv在影片| 在线观看91久久久久久| 成人免费激情视频| 色悠悠国产精品| 色婷婷av一区二区三区在线观看| 97人人模人人爽人人喊中文字| 亚洲深夜福利网站| 色黄久久久久久| 亚洲小视频在线|