Comment implémenter le téléchargement et le téléchargement de fichiers en PHP

墨辰丷
Libérer: 2023-03-28 17:36:01
original
6053 Les gens l'ont consulté

Cet article présente principalement des exemples de téléchargement et de téléchargement de fichiers en PHP. Cet article explique en détail et de manière complète l'analyse de la demande et la mise en œuvre des fonctions liées au téléchargement de fichiers, et fournit également le code d'utilisation. Les amis dans le besoin peuvent s'y référer. PHP implémente le téléchargement et le téléchargement de fichiers

1. Principe et configuration du téléchargement

Principe 1.1

Télécharger les fichiers client sur le serveur. les fichiers côté serveur (fichiers temporaires) dans le répertoire spécifié.

1.2 Configuration du client

Obligatoire : page de formulaire (sélectionnez le fichier de téléchargement)

Plus précisément : la méthode d'envoi est POST, ajoutez l'attribut enctype="multipart/form- data" ; , les deux sont indispensables (cependant, avantages et inconvénients coexistent, ici limite également la méthode de téléchargement et l'appel du fichier téléchargé, qui seront abordés plus tard)

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="doAction.php" method="post" enctype="multipart/form-data">
请选择您要上传的文件:
<input type="file" name="myFile" /><br/>
<input type="submit" value="上传"/>
</form>
<?php

?>
</body>
</html>
Copier après la connexion

Le premier est la page du formulaire (veuillez ignorer automatiquement les problèmes du front-end...), la clé est l'attribut du formulaire ; l'autre est que type="file" est utilisé en entrée (reflété en php) Extension puissante, etc.).

Alors doAction

<?php
//$_FILES:文件上传变量
//print_r($_FILES);
$filename=$_FILES[&#39;myFile&#39;][&#39;name&#39;];
$type=$_FILES[&#39;myFile&#39;][&#39;type&#39;];
$tmp_name=$_FILES[&#39;myFile&#39;][&#39;tmp_name&#39;];
$size=$_FILES[&#39;myFile&#39;][&#39;size&#39;];
$error=$_FILES[&#39;myFile&#39;][&#39;error&#39;];

//将服务器上的临时文件移动到指定位置
//方法一move_upload_file($tmp_name,$destination)
//move_uploaded_file($tmp_name, "uploads/".$filename);//文件夹应提前建立好,不然报错
//方法二copy($src,$des)
//以上两个函数都是成功返回真,否则返回false
//copy($tmp_name, "copies/".$filename);
//注意,不能两个方法都对临时文件进行操作,临时文件似乎操作完就没了,我们试试反过来
copy($tmp_name, "copies/".$filename);
move_uploaded_file($tmp_name, "uploads/".$filename);
//能够实现,说明move那个函数基本上相当于剪切;copy就是copy,临时文件还在

//另外,错误信息也是不一样的,遇到错误可以查看或者直接报告给用户
if ($error==0) {
  echo "上传成功!";
}else{
  switch ($error){
    case 1:
      echo "超过了上传文件的最大值,请上传2M以下文件";
      break;
    case 2:
      echo "上传文件过多,请一次上传20个及以下文件!";
      break;
    case 3:
      echo "文件并未完全上传,请再次尝试!";
      break;
    case 4:
      echo "未选择上传文件!";
      break;
    case 5:
      echo "上传文件为0";
      break;
  }
}
Copier après la connexion

Premier coup d'oeil aux informations print_r($_FILES)

Array
(
  [myFile] => Array
    (
      [name] => 梁博_简历.doc
      [type] => application/msword
      [tmp_name] => D:\wamp\tmp\php1D78.tmp
      [error] => 0
      [size] => 75776
    )

)
Copier après la connexion

Donc, ce que vous obtenez est un tableau bidimensionnel. Comment l'utiliser, ce sont des choses basiques (en fait, j'aime réduire la dimension puis l'utiliser). ;

En gros, c'est quelque chose que vous pouvez comprendre en un coup d'œil, pas trop verbeux. Il y a deux points clés : le nom du fichier temporaire tmp_name ; le message d'erreur (nom de code, vous pourrez l'utiliser plus tard) ; 🎜> Ensuite, voici un aperçu de la dernière partie de doAction et utilisez le rapport d'erreur. Les informations sont renvoyées à l'utilisateur. Ce qui doit être expliqué, c'est pourquoi l'erreur est signalée et quel est le message d'erreur

. 1.3 À propos du rapport d'erreurs

--La raison de l'erreur :

En gros, ils dépassent ou ne sont pas conformes à la configuration du serveur pour le téléchargement de fichiers. Alors, quels sont les. configurations côté serveur ?

Envisagez d'abord de télécharger ce que nous avons utilisé ? POST, téléchargez

Recherchez donc ces éléments dans php.ini :

file_upload:On

upload_tmp_dir=——répertoire d'enregistrement de fichiers temporaire

upload_max_filesize ; =2M

max_file_uploads=20 - le nombre maximum de fichiers autorisés à être téléchargés en même temps (notez la différence avec celui ci-dessus, n'y pensez pas s'il y a une taille)

post_max_size=8M - méthode de publication Valeur maximale des données envoyées

Autres configurations associées

max_exetuion_time=-1 - temps d'exécution maximum pour éviter que le programme n'occupe les ressources du serveur ;

max_input_time=60

max_input_nesting_level=64——Profondeur d'imbrication d'entrée ;

memory_limit=128M——Utilisation maximale de la mémoire indépendante d'un seul thread

Dans bref, tout est question de configuration des ressources.

--Numéro d'erreur

La citation (paresseuse) suivante provient de http://blog.sina.com.cn/s/blog_3cdfaea201008utf.html

    UPLOAD_ERR_OK Valeur : 0 ; Aucune erreur ne s'est produite et le fichier a été téléchargé avec succès.
  • UPLOAD_ERR_INI_SIZE Valeur : 1 ; Le fichier téléchargé dépasse la limite de l'option upload_max_filesize dans php.ini.
  • UPLOAD_ERR_FORM_SIZE Valeur : 2 ; La taille du fichier téléchargé dépasse la valeur spécifiée par l'option MAX_FILE_SIZE dans le formulaire HTML.
  • UPLOAD_ERR_PARTIAL Valeur : 3 ; Seule une partie du fichier a été téléchargée.
  • UPLOAD_ERR_NO_FILE Valeur : 4 ; Aucun fichier n'a été téléchargé.
  • Remarque : Ce message d'erreur concerne les informations téléchargées lors de la première étape, c'est-à-dire téléchargées dans un dossier temporaire, et non déplacées ou copiées.

2. Restrictions liées au téléchargement

2.1 Restrictions client


<form action="doAction2.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="101321" />
Copier après la connexion

Veuillez sélectionner le fichier que vous souhaitez télécharger :


<input type="file" name="myFile" accept="image/jpeg,image/gif,text/html"/><br/>
<input type="submit" value="上传"/>
</form>
Copier après la connexion

L'attribut input est utilisé ici pour limiter la taille et le type du fichier téléchargé, mais sentiments personnels : premièrement, le code html est "visible" ; deuxièmement, il ne fonctionne souvent pas (je n'ai pas trouvé la raison, mais à cause de la première, je veux aussi y renoncer, il suffit de le savoir.

2.2 Limitations côté serveur

Les principales restrictions sont la taille et le type, et puis il y a la méthode 🎜>


<. 🎜>

Appel
<?php
header(&#39;content-type:text/html;charset=utf-8&#39;);
//接受文件,临时文件信息
$fileinfo=$_FILES["myFile"];//降维操作
$filename=$fileinfo["name"];
$tmp_name=$fileinfo["tmp_name"];
$size=$fileinfo["size"];
$error=$fileinfo["error"];
$type=$fileinfo["type"];

//服务器端设定限制
$maxsize=10485760;//10M,10*1024*1024
$allowExt=array(&#39;jpeg&#39;,&#39;jpg&#39;,&#39;png&#39;,&#39;tif&#39;);//允许上传的文件类型(拓展名
$ext=pathinfo($filename,PATHINFO_EXTENSION);//提取上传文件的拓展名

//目的信息
$path="uploads";
if (!file_exists($path)) {  //当目录不存在,就创建目录
  mkdir($path,0777,true);
  chmod($path, 0777);
}
//$destination=$path."/".$filename;
//得到唯一的文件名!防止因为文件名相同而产生覆盖
$uniName=md5(uniqid(microtime(true),true)).$ext;//md5加密,uniqid产生唯一id,microtime做前缀


if ($error==0) {
  if ($size>$maxsize) {
    exit("上传文件过大!");
  }
  if (!in_array($ext, $allowExt)) {
    exit("非法文件类型");
  }
  if (!is_uploaded_file($tmp_name)) {
    exit("上传方式有误,请使用post方式");
  }
  if (@move_uploaded_file($tmp_name, $uniName)) {//@错误抑制符,不让用户看到警告
    echo "文件".$filename."上传成功!";
  }else{
    echo "文件".$filename."上传失败!";
  }
  //判断是否为真实图片(防止伪装成图片的病毒一类的
  if (!getimagesize($tmp_name)) {//getimagesize真实返回数组,否则返回false
    exit("不是真正的图片类型");
  }

}else{
  switch ($error){
    case 1:
      echo "超过了上传文件的最大值,请上传2M以下文件";
      break;
    case 2:
      echo "上传文件过多,请一次上传20个及以下文件!";
      break;
    case 3:
      echo "文件并未完全上传,请再次尝试!";
      break;
    case 4:
      echo "未选择上传文件!";
      break;
    case 7:
      echo "没有临时文件夹";
      break;
  }
}
这里,具体实现都有注释,每一步其实都可以自己
Copier après la connexion


3.1. Utilisation de l'encapsulation de fichier unique

<?php
function uploadFile($fileInfo,$path,$allowExt,$maxSize){

$filename=$fileInfo["name"];
$tmp_name=$fileInfo["tmp_name"];
$size=$fileInfo["size"];
$error=$fileInfo["error"];
$type=$fileInfo["type"];

//服务器端设定限制

$ext=pathinfo($filename,PATHINFO_EXTENSION);

//目的信息
if (!file_exists($path)) {  
  mkdir($path,0777,true);
  chmod($path, 0777);
}
$uniName=md5(uniqid(microtime(true),true)).&#39;.&#39;.$ext;
$destination=$path."/".$uniName;


if ($error==0) {
  if ($size>$maxSize) {
    exit("上传文件过大!");
  }
  if (!in_array($ext, $allowExt)) {
    exit("非法文件类型");
  }
  if (!is_uploaded_file($tmp_name)) {
    exit("上传方式有误,请使用post方式");
  }
  //判断是否为真实图片(防止伪装成图片的病毒一类的
  if (!getimagesize($tmp_name)) {//getimagesize真实返回数组,否则返回false
    exit("不是真正的图片类型");
  }
  if (@move_uploaded_file($tmp_name, $destination)) {//@错误抑制符,不让用户看到警告
    echo "文件".$filename."上传成功!";
  }else{
    echo "文件".$filename."上传失败!";
  }
  

}else{
  switch ($error){
    case 1:
      echo "超过了上传文件的最大值,请上传2M以下文件";
      break;
    case 2:
      echo "上传文件过多,请一次上传20个及以下文件!";
      break;
    case 3:
      echo "文件并未完全上传,请再次尝试!";
      break;
    case 4:
      echo "未选择上传文件!";
      break;
    case 7:
      echo "没有临时文件夹";
      break;
  }
}
return $destination;
}
Copier après la connexion


L'idée ici, trouvez-la depuis print_r($_FILES). qu'il s'agit d'un tableau bidimensionnel. C'est très simple. Il suffit de le parcourir et de l'utiliser

<?php
header(&#39;content-type:text/html;charset=utf-8&#39;);
$fileInfo=$_FILES["myFile"];
$maxSize=10485760;//10M,10*1024*1024
$allowExt=array(&#39;jpeg&#39;,&#39;jpg&#39;,&#39;png&#39;,&#39;tif&#39;);
$path="uploads";
include_once &#39;upFunc.php&#39;;
uploadFile($fileInfo, $path, $allowExt, $maxSize);
Copier après la connexion
Changez la définition de la fonction ci-dessus et donnez quelques valeurs par défaut

<🎜. >

De cette façon, c'est simple, mais il y a quelques problèmes

Ce n'est pas un problème de télécharger 4 photos normalement, mais si vous quittez la fonction. est activé au milieu, il s'arrêtera immédiatement, empêchant le téléchargement d'autres images

La version 3.2 mise à niveau du package
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="doAction5.php" method="post" enctype="multipart/form-data">
请选择您要上传的文件:<input type="file" name="myFile1" /><br/>
请选择您要上传的文件:<input type="file" name="myFile2" /><br/>
请选择您要上传的文件:<input type="file" name="myFile3" /><br/>
请选择您要上传的文件:<input type="file" name="myFile4" /><br/>
<input type="submit" value="上传"/>
</form>
</body>
</html>
<?php
//print_r($_FILES);
header(&#39;content-type:text/html;charset=utf-8&#39;);
include_once &#39;upFunc.php&#39;;
foreach ($_FILES as $fileInfo){
  $file[]=uploadFile($fileInfo);
}
Copier après la connexion

est conçue pour permettre le téléchargement de fichiers multiples ou uniques. Encapsuler

Écrivez d'abord un fichier statique comme celui-ci


function uploadFile($fileInfo,$path="uploads",$allowExt=array(&#39;jpeg&#39;,&#39;jpg&#39;,&#39;png&#39;,&#39;tif&#39;),$maxSize=10485760){
Copier après la connexion

Imprimez $_FILES

Array
(
  [myFile] => Array
    (
      [name] => Array
        (
          [0] => test32.png
          [1] => test32.png
          [2] => 333.png
          [3] => test41.png
        )

      [type] => Array
        (
          [0] => image/png
          [1] => image/png
          [2] => image/png
          [3] => image/png
        )

      [tmp_name] => Array
        (
          [0] => D:\wamp\tmp\php831C.tmp
          [1] => D:\wamp\tmp\php834C.tmp
          [2] => D:\wamp\tmp\php837C.tmp
          [3] => D:\wamp\tmp\php83BB.tmp
        )

      [error] => Array
        (
          [0] => 0
          [1] => 0
          [2] => 0
          [3] => 0
        )

      [size] => Array
        (
          [0] => 46174
          [1] => 46174
          [2] => 34196
          [3] => 38514
        )

    )

)
Copier après la connexion

可以得到一个三维数组。

复杂是复杂了,但复杂的有规律,各项数值都在一起了,很方便我们取值!!

所以先得到文件信息,变成单文件处理那种信息

function getFiles(){
  $i=0;
  foreach($_FILES as $file){
    if(is_string($file[&#39;name&#39;])){ //单文件判定
      $files[$i]=$file;
      $i++;
    }elseif(is_array($file[&#39;name&#39;])){
      foreach($file[&#39;name&#39;] as $key=>$val){ //我的天,这个$key用的diao
        $files[$i][&#39;name&#39;]=$file[&#39;name&#39;][$key];
        $files[$i][&#39;type&#39;]=$file[&#39;type&#39;][$key];
        $files[$i][&#39;tmp_name&#39;]=$file[&#39;tmp_name&#39;][$key];
        $files[$i][&#39;error&#39;]=$file[&#39;error&#39;][$key];
        $files[$i][&#39;size&#39;]=$file[&#39;size&#39;][$key];
        $i++;
      }
    }
  }
  return $files;
  
}
Copier après la connexion

然后之前的那种exit错误,就把exit改一下就好了,这里用res

function uploadFile($fileInfo,$path=&#39;./uploads&#39;,$flag=true,$maxSize=1048576,$allowExt=array(&#39;jpeg&#39;,&#39;jpg&#39;,&#39;png&#39;,&#39;gif&#39;)){
  //$flag=true;
  //$allowExt=array(&#39;jpeg&#39;,&#39;jpg&#39;,&#39;gif&#39;,&#39;png&#39;);
  //$maxSize=1048576;//1M
  //判断错误号
  $res=array();
  if($fileInfo[&#39;error&#39;]===UPLOAD_ERR_OK){
    //检测上传得到小
    if($fileInfo[&#39;size&#39;]>$maxSize){
      $res[&#39;mes&#39;]=$fileInfo[&#39;name&#39;].&#39;上传文件过大&#39;;
    }
    $ext=getExt($fileInfo[&#39;name&#39;]);
    //检测上传文件的文件类型
    if(!in_array($ext,$allowExt)){
      $res[&#39;mes&#39;]=$fileInfo[&#39;name&#39;].&#39;非法文件类型&#39;;
    }
    //检测是否是真实的图片类型
    if($flag){
      if(!getimagesize($fileInfo[&#39;tmp_name&#39;])){
        $res[&#39;mes&#39;]=$fileInfo[&#39;name&#39;].&#39;不是真实图片类型&#39;;
      }
    }
    //检测文件是否是通过HTTP POST上传上来的
    if(!is_uploaded_file($fileInfo[&#39;tmp_name&#39;])){
      $res[&#39;mes&#39;]=$fileInfo[&#39;name&#39;].&#39;文件不是通过HTTP POST方式上传上来的&#39;;
    }
    if($res) return $res;
    //$path=&#39;./uploads&#39;;
    if(!file_exists($path)){
      mkdir($path,0777,true);
      chmod($path,0777);
    }
    $uniName=getUniName();
    $destination=$path.&#39;/&#39;.$uniName.&#39;.&#39;.$ext;
    if(!move_uploaded_file($fileInfo[&#39;tmp_name&#39;],$destination)){
      $res[&#39;mes&#39;]=$fileInfo[&#39;name&#39;].&#39;文件移动失败&#39;;
    }
    $res[&#39;mes&#39;]=$fileInfo[&#39;name&#39;].&#39;上传成功&#39;;
    $res[&#39;dest&#39;]=$destination;
    return $res;
    
  }else{
    //匹配错误信息
    switch ($fileInfo [&#39;error&#39;]) {
      case 1 :
        $res[&#39;mes&#39;] = &#39;上传文件超过了PHP配置文件中upload_max_filesize选项的值&#39;;
        break;
      case 2 :
        $res[&#39;mes&#39;] = &#39;超过了表单MAX_FILE_SIZE限制的大小&#39;;
        break;
      case 3 :
        $res[&#39;mes&#39;] = &#39;文件部分被上传&#39;;
        break;
      case 4 :
        $res[&#39;mes&#39;] = &#39;没有选择上传文件&#39;;
        break;
      case 6 :
        $res[&#39;mes&#39;] = &#39;没有找到临时目录&#39;;
        break;
      case 7 :
      case 8 :
        $res[&#39;mes&#39;] = &#39;系统错误&#39;;
        break;
    }
    return $res;
  }
}
Copier après la connexion

里面封装了两个小的

function getExt($filename){
  return strtolower(pathinfo($filename,PATHINFO_EXTENSION));
}

/**
 * 产生唯一字符串
 * @return string
 */
function getUniName(){
  return md5(uniqid(microtime(true),true));
}
Copier après la connexion

然后静态中,用multiple属性实现多个文件的输入;

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="doAction6.php" method="POST" enctype="multipart/form-data">
请选择您要上传的文件:<input type="file" name="myFile[]" multiple=&#39;multiple&#39; /><br/>
<input type="submit" value="上传"/>
</form>
</body>
</html>
doAction6
<?php 
//print_r($_FILES);
header("content-type:text/html;charset=utf-8");
require_once &#39;upFunc2.php&#39;;
require_once &#39;common.func.php&#39;;
$files=getFiles();
// print_r($files);
foreach($files as $fileInfo){
  $res=uploadFile($fileInfo);
  echo $res[&#39;mes&#39;],&#39;<br/>&#39;;
  $uploadFiles[]=@$res[&#39;dest&#39;];
}
$uploadFiles=array_values(array_filter($uploadFiles));
//print_r($uploadFiles);
Copier après la connexion

这样子的几个文件,就实现比较强大的面向过程的上传文件的功能(学的叫一个心酸。。。);

四、面向对象的文件上传

<?php 
class upload{
  protected $fileName;
  protected $maxSize;
  protected $allowMime;
  protected $allowExt;
  protected $uploadPath;
  protected $imgFlag;
  protected $fileInfo;
  protected $error;
  protected $ext;
  /**
   * @param string $fileName
   * @param string $uploadPath
   * @param string $imgFlag
   * @param number $maxSize
   * @param array $allowExt
   * @param array $allowMime
   */
  public function __construct($fileName=&#39;myFile&#39;,$uploadPath=&#39;./uploads&#39;,$imgFlag=true,$maxSize=5242880,$allowExt=array(&#39;jpeg&#39;,&#39;jpg&#39;,&#39;png&#39;,&#39;gif&#39;),$allowMime=array(&#39;image/jpeg&#39;,&#39;image/png&#39;,&#39;image/gif&#39;)){
    $this->fileName=$fileName;
    $this->maxSize=$maxSize;
    $this->allowMime=$allowMime;
    $this->allowExt=$allowExt;
    $this->uploadPath=$uploadPath;
    $this->imgFlag=$imgFlag;
    $this->fileInfo=$_FILES[$this->fileName];
  }
  /**
   * 检测上传文件是否出错
   * @return boolean
   */
  protected function checkError(){
    if(!is_null($this->fileInfo)){
      if($this->fileInfo[&#39;error&#39;]>0){
        switch($this->fileInfo[&#39;error&#39;]){
          case 1:
            $this->error=&#39;超过了PHP配置文件中upload_max_filesize选项的值&#39;;
            break;
          case 2:
            $this->error=&#39;超过了表单中MAX_FILE_SIZE设置的值&#39;;
            break;
          case 3:
            $this->error=&#39;文件部分被上传&#39;;
            break;
          case 4:
            $this->error=&#39;没有选择上传文件&#39;;
            break;
          case 6:
            $this->error=&#39;没有找到临时目录&#39;;
            break;
          case 7:
            $this->error=&#39;文件不可写&#39;;
            break;
          case 8:
            $this->error=&#39;由于PHP的扩展程序中断文件上传&#39;;
            break;
            
        }
        return false;
      }else{
        return true;
      }
    }else{
      $this->error=&#39;文件上传出错&#39;;
      return false;
    }
  }
  /**
   * 检测上传文件的大小
   * @return boolean
   */
  protected function checkSize(){
    if($this->fileInfo[&#39;size&#39;]>$this->maxSize){
      $this->error=&#39;上传文件过大&#39;;
      return false;
    }
    return true;
  }
  /**
   * 检测扩展名
   * @return boolean
   */
  protected function checkExt(){
    $this->ext=strtolower(pathinfo($this->fileInfo[&#39;name&#39;],PATHINFO_EXTENSION));
    if(!in_array($this->ext,$this->allowExt)){
      $this->error=&#39;不允许的扩展名&#39;;
      return false;
    }
    return true;
  }
  /**
   * 检测文件的类型
   * @return boolean
   */
  protected function checkMime(){
    if(!in_array($this->fileInfo[&#39;type&#39;],$this->allowMime)){
      $this->error=&#39;不允许的文件类型&#39;;
      return false;
    }
    return true;
  }
  /**
   * 检测是否是真实图片
   * @return boolean
   */
  protected function checkTrueImg(){
    if($this->imgFlag){
      if(!@getimagesize($this->fileInfo[&#39;tmp_name&#39;])){
        $this->error=&#39;不是真实图片&#39;;
        return false;
      }
      return true;
    }
  }
  /**
   * 检测是否通过HTTP POST方式上传上来的
   * @return boolean
   */
  protected function checkHTTPPost(){
    if(!is_uploaded_file($this->fileInfo[&#39;tmp_name&#39;])){
      $this->error=&#39;文件不是通过HTTP POST方式上传上来的&#39;;
      return false;
    }
    return true;
  }
  /**
   *显示错误 
   */
  protected function showError(){
    exit(&#39;<span style="color:red">&#39;.$this->error.&#39;</span>&#39;);
  }
  /**
   * 检测目录不存在则创建
   */
  protected function checkUploadPath(){
    if(!file_exists($this->uploadPath)){
      mkdir($this->uploadPath,0777,true);
    }
  }
  /**
   * 产生唯一字符串
   * @return string
   */
  protected function getUniName(){
    return md5(uniqid(microtime(true),true));
  }
  /**
   * 上传文件
   * @return string
   */
  public function uploadFile(){
    if($this->checkError()&&$this->checkSize()&&$this->checkExt()&&$this->checkMime()&&$this->checkTrueImg()&&$this->checkHTTPPost()){
      $this->checkUploadPath();
      $this->uniName=$this->getUniName();
      $this->destination=$this->uploadPath.&#39;/&#39;.$this->uniName.&#39;.&#39;.$this->ext;
      if(@move_uploaded_file($this->fileInfo[&#39;tmp_name&#39;], $this->destination)){
        return $this->destination;
      }else{
        $this->error=&#39;文件移动失败&#39;;
        $this->showError();
      }
    }else{
      $this->showError();
    }
  }
}
<?php 
header(&#39;content-type:text/html;charset=utf-8&#39;);
require_once &#39;upload.class.php&#39;;
$upload=new upload(&#39;myFile1&#39;,&#39;imooc&#39;);
$dest=$upload->uploadFile();
echo $dest;
Copier après la connexion

四、下载

对于浏览器不识别的,可以直接下载,但对于能识别的,需要多一两步

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Insert title here</title>
</head>
<body>
<a href="1.rar">下载1.rar</a>
<br />
<a href="1.jpg">下载1.jpg</a>
<br />
<a href="doDownload.php?filename=1.jpg">通过程序下载1.jpg</a>
<br />
<a href="doDownload.php?filename=../upload/nv.jpg">下载nv.jpg</a>
<?php

?>
</body>
</html>
<?php 
$filename=$_GET[&#39;filename&#39;];
header(&#39;content-disposition:attachment;filename=&#39;.basename($filename));
header(&#39;content-length:&#39;.filesize($filename));
readfile($filename);
Copier après la connexion

总结:以上就是本篇文的全部内容,希望能对大家的学习有所帮助。

相关推荐:

PHP字符串定义方式及各自区别 

php substr函数定义与用法汇总

php 三元运算符实例详细介绍

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!