最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

php上傳文件常見(jiàn)問(wèn)題總結(jié)

 更新時(shí)間:2015年02月03日 09:18:40   投稿:hebedich  
這篇文章主要介紹了php上傳文件常見(jiàn)問(wèn)題總結(jié),基本上經(jīng)常碰到的問(wèn)題的處理都列了出來(lái),有需要的小伙伴參考下。

把php上傳文件時(shí)經(jīng)常碰到的幾個(gè)問(wèn)題總結(jié)一下吧,以后用到時(shí)不用再去找了。

1.先做個(gè)最簡(jiǎn)單的上傳文件

復(fù)制代碼 代碼如下:

 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 </head>
 <body>
 <form action="upload_file.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>
 </body>
 </html>

復(fù)制代碼 代碼如下:

<?php
if (($_FILES["file"]["size"] < 20000)
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_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 "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
    if (file_exists("upload/" . $_FILES["file"]["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";
  }
?>

2.然后了解超級(jí)全局變量$_FILES的值

復(fù)制代碼 代碼如下:

$_FILES['userfile']['name']
$_FILES['userfile']['type']
$_FILES['userfile']['size']
$_FILES['userfile']['tmp_name']
$_FILES['userfile']['error']

其中,$_FILES['userfile']['error']的所有值:

UPLOAD_ERR_OK 其值為 0,沒(méi)有錯(cuò)誤發(fā)生,文件上傳成功。

UPLOAD_ERR_INI_SIZE 其值為 1,上傳的文件超過(guò)了 php.ini 中 upload_max_filesize 選項(xiàng)限制的值。

UPLOAD_ERR_FORM_SIZE 其值為 2,上傳文件的大小超過(guò)了 HTML 表單中 MAX_FILE_SIZE 選項(xiàng)指定的值。

UPLOAD_ERR_PARTIAL 其值為 3,文件只有部分被上傳。

UPLOAD_ERR_NO_FILE 其值為 4,沒(méi)有文件被上傳。

UPLOAD_ERR_NO_TMP_DIR 其值為 6,找不到臨時(shí)文件夾。PHP 4.3.10 和 PHP 5.0.3 引進(jìn)。

UPLOAD_ERR_CANT_WRITE 其值為 7,文件寫(xiě)入失敗。PHP 5.1.0 引進(jìn)。

3.很多情況:需要嚴(yán)格判斷上傳文件類(lèi)型

     我們知道使用$_FILES['userfile']['type']判斷上傳文件類(lèi)型是一個(gè)很不明智的做法,因?yàn)樵撆袛嘁罁?jù)是文件的后綴名,任何人都可以將一個(gè)mp3文件的后綴改成jpg從而偽裝成圖片進(jìn)行上傳,因此php官方建議使用php的擴(kuò)展php_fileinfo來(lái)判斷文件的mime,開(kāi)啟拓展的方法百度一下有很多,win和linux略有不同。

4.情景一:上傳文件重名后自動(dòng)重命名

復(fù)制代碼 代碼如下:

if (file_exists("./upload/" . $_FILES["file"]["name"])) 
{   
   do{ 
       $suffix =""; 
       $suffix_length = 4; 
       $str = "0123456789abcdefghijklmnopqrstuvwxyz"; 
       $len = strlen($str)-1;
       //文件名后追加4個(gè)隨機(jī)字符 
       for($i=0 ; $i<$suffix_length; $i++){ 
          $suffix .= $str[rand(0,$len)]; 
       } 
       $upload_filename = $_FILES['file']['name'];                                           
       $filename = substr($upload_filename,0,strrpos($upload_filename,".")).$suffix.".".substr($upload_filename,strrpos($_FILES["file"]["name"],".")+1);
   }while(file_exists("./upload/".$filename)); 
       move_uploaded_file($_FILES["file"]["tmp_name"],"./upload/" . $filename); 
}else{ 
       move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);  

5.情景二:根據(jù)日期分目錄上傳文件

復(fù)制代碼 代碼如下:

$structure = './'.date("Y").'/'.date("m").'/'.date("d").'/';
if (!mkdir($structure, 0777, true)) {
    die('Failed to create folders...');
}
move_uploaded_file($_FILES["file"]["tmp_name"],$structure . $_FILES["file"]["name"]);

6.情景三:多文件上傳

復(fù)制代碼 代碼如下:

 <form action="" method="post" enctype="multipart/form-data">
 <p>Pictures:
 <input type="file" name="pictures[]" />
 <input type="file" name="pictures[]" />
 <input type="file" name="pictures[]" />
 <input type="submit" value="Send" />
 </p>
 </form>

復(fù)制代碼 代碼如下:

 <?php
 foreach ($_FILES["pictures"]["error"] as $key => $error) {
     if ($error == UPLOAD_ERR_OK) {
         $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
         $name = $_FILES["pictures"]["name"][$key];
         move_uploaded_file($tmp_name, "data/$name");
     }
 }
 ?>

有的情況下多文件的這種變量結(jié)構(gòu)并不好用:

復(fù)制代碼 代碼如下:

array(1) {
    ["upload"]=>array(2) {
        ["name"]=>array(2) {
            [0]=>string(9)"file0.txt"
            [1]=>string(9)"file1.txt"
        }
        ["type"]=>array(2) {
            [0]=>string(10)"text/plain"
            [1]=>string(10)"text/html"
        }
    }
}

很多情況下我們需要的是類(lèi)似這樣的結(jié)構(gòu)

復(fù)制代碼 代碼如下:

array(1) {
    ["upload"]=>array(2) {
        [0]=>array(2) {
            ["name"]=>string(9)"file0.txt"
            ["type"]=>string(10)"text/plain"
        },
        [1]=>array(2) {
            ["name"]=>string(9)"file1.txt"
            ["type"]=>string(10)"text/html"
        }
}
}

使用下面的函數(shù)就能輕松轉(zhuǎn)化結(jié)構(gòu)

復(fù)制代碼 代碼如下:

 function diverse_array($vector) {
     $result = array();
     foreach($vector as $key1 => $value1)
         foreach($value1 as $key2 => $value2)
             $result[$key2][$key1] = $value2;
     return $result;
 }
 $upload = diverse_array($_FILES["upload"]);

7. 有的時(shí)候:需要配置服務(wù)器修改最大上傳文件大小

首先,在表單上

<input type="hidden" name="MAX_FILE_SIZE" value="字節(jié)" />
可以限制上傳文件大?。梢员焕@過(guò))。

然后在服務(wù)器上也需要調(diào)整一下配置

php.ini:

max_execution_time = 30 每個(gè)腳本運(yùn)行的最長(zhǎng)時(shí)間,單位秒
max_input_time = 60,每個(gè)腳本可以消耗的時(shí)間,單位也是秒
memory_limit = 128M,這個(gè)是腳本運(yùn)行最大消耗的內(nèi)存
post_max_size = 8M,表單提交最大數(shù)據(jù)為 8M,此項(xiàng)不是限制上傳單個(gè)文件的大小,而是針對(duì)整個(gè)表單的提交數(shù)據(jù)進(jìn)行限制的。
upload_max_filesize = 2M ,上載文件的最大許可大小

nginx:

復(fù)制代碼 代碼如下:

 location / {
     root   html;
     index  index.html index.htm;
     client_max_body_size    1000m;
  }

以上就是常見(jiàn)的問(wèn)題的處理方法了,希望大家能夠喜歡。

相關(guān)文章

  • 詳解PHP處理字符串類(lèi)似indexof的方法函數(shù)

    詳解PHP處理字符串類(lèi)似indexof的方法函數(shù)

    這篇文章主要介紹了詳解PHP處理字符串類(lèi)似indexof的方法函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 百度地圖API應(yīng)用之獲取用戶(hù)的具體位置

    百度地圖API應(yīng)用之獲取用戶(hù)的具體位置

    以前一直用高德地圖的API,后來(lái)因?yàn)樾枨?,必須用百度的地圖API。這些API都已經(jīng)封裝的很智能了,只需要一定的編程思維,就很簡(jiǎn)單可以實(shí)現(xiàn)功能。
    2014-06-06
  • HTTP中header頭部信息詳解

    HTTP中header頭部信息詳解

    這篇文章主要介紹了HTTP中header頭部信息詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • TP5框架實(shí)現(xiàn)上傳多張圖片的方法分析

    TP5框架實(shí)現(xiàn)上傳多張圖片的方法分析

    這篇文章主要介紹了TP5框架實(shí)現(xiàn)上傳多張圖片的方法,結(jié)合實(shí)例形式分析了TP5上傳多張圖片相關(guān)的視圖、模型、控制器操作技巧,需要的朋友可以參考下
    2020-03-03
  • PHP后臺(tái)實(shí)現(xiàn)微信小程序登錄

    PHP后臺(tái)實(shí)現(xiàn)微信小程序登錄

    這篇文章主要為大家詳細(xì)介紹了PHP后臺(tái)實(shí)現(xiàn)微信小程序登錄,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Codeigniter+PHPExcel實(shí)現(xiàn)導(dǎo)出數(shù)據(jù)到Excel文件

    Codeigniter+PHPExcel實(shí)現(xiàn)導(dǎo)出數(shù)據(jù)到Excel文件

    PHPExcel是用來(lái)操作OfficeExcel文檔的一個(gè)PHP類(lèi)庫(kù),Codeigniter是一個(gè)功能強(qiáng)大的PHP框架。二者結(jié)合就能起到非常棒的效果,需要的朋友可以參考下
    2014-06-06
  • laravel開(kāi)發(fā)中跨域的解決方案

    laravel開(kāi)發(fā)中跨域的解決方案

    最近在開(kāi)發(fā)中遇到了跨域的需求,通過(guò)查找相關(guān)資料找到了相關(guān)的解決方法了,所以下面這篇文章主要給大家介紹了關(guān)于laravel開(kāi)發(fā)中跨域的解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-10-10
  • php模板引擎技術(shù)簡(jiǎn)單實(shí)現(xiàn)

    php模板引擎技術(shù)簡(jiǎn)單實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了php模板引擎技術(shù)簡(jiǎn)單實(shí)現(xiàn),感興趣的小伙伴們可以參考一下
    2016-03-03
  • laravel csrf驗(yàn)證總結(jié)

    laravel csrf驗(yàn)證總結(jié)

    這篇文章主要介紹了laravel csrf驗(yàn)證總結(jié),csrf是laravel表單提交和ajax請(qǐng)求為了安全設(shè)置的機(jī)制,有感興趣的同學(xué)可以深入學(xué)習(xí)下
    2021-03-03
  • 詳談PHP中public,private,protected,abstract等關(guān)鍵字的用法

    詳談PHP中public,private,protected,abstract等關(guān)鍵字的用法

    下面小編就為大家分享一篇詳談PHP中public,private,protected,abstract等關(guān)鍵字的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12

最新評(píng)論

彝良县| 鄂托克旗| 湄潭县| 慈利县| 霸州市| 永和县| 四平市| 磴口县| 嘉峪关市| 东方市| 丽水市| 马鞍山市| 黄梅县| 丹阳市| 军事| 体育| 南安市| 如皋市| 周至县| 巴南区| 武平县| 稷山县| 纳雍县| 临安市| 台安县| 林州市| 灌南县| 安陆市| 广德县| 永顺县| 泾川县| 顺昌县| 封丘县| 崇左市| 高陵县| 沁水县| 桃江县| 沐川县| 恭城| 巴林右旗| 岳西县|