Maison >développement back-end >tutoriel php >Explication détaillée de l'exemple de méthode PHP permettant de déterminer si le fichier a été téléchargé

Explication détaillée de l'exemple de méthode PHP permettant de déterminer si le fichier a été téléchargé

伊谢尔伦
伊谢尔伦original
2017-06-27 14:04:185103parcourir

Un programmeur qualifié aura des règles de filtrage et de données très strictes lors de l'implémentation des données dans la base de données. Par exemple, lorsque nous téléchargez un fichier, nous devons déterminer si l'utilisateur choisit de télécharger le fichier. au début. Dans le même temps, vous pouvez également déterminer s'il y a des fichiers téléchargés en arrière-plan. L'exemple de cet article en fera une analyse plus approfondie.

Comme le montre le code html suivant :

<form action="?" method="post" enctype=&#39;multipart/form-data&#39;>
文件上传:<input type="file" name="file" id="file"/>
<input type="submit" id="send" value="提交"/>
</form>

Nous utilisons le plus souvent un simple jugement sur le front-end

<script>
var send=document.getElementById("send");
send.onclick=function(){
var file=document.getElementById("file").value;
if(file.length<1){
alert(&#39;请选择图片&#39;);
return false;
}
}
</script>

Si vous voulez faire la vraie choseSécuritéNous devons entrer le traitement du jugement en arrière-plan

<?php
//判断pic文件框是否已经选择文件
if(!empty($_FILES[&#39;file&#39;][&#39;tmp_name&#39;])){
echo&#39;已选择文件&#39;;
}else{
echo&#39;请选择文件&#39;;
}
//PS:$_FILES后面的[&#39;tmp_name&#39;]一定不要忘写,它表示是一个临时的意思
?>

Exemple d'analyse

Le jugement JS est relativement général, nous avons juste utilisez file=document.getElementById("file").value; pour déterminer si le fichier a une valeur ou s'il n'est pas vide, de cette façon, vous pouvez le soumettre directement en entrant un nombre, nous devons donc entrer la limite du nom d'utilisateur. pour télécharger des fichiers
tels que

function CheckWorkFile()
{
var obj=document.getElementById(&#39;fuMain&#39;);
if(obj.value==&#39;&#39;)
{
alert(&#39;请选择要上传的作业书文件&#39;);
return false;
}
var stuff=obj.value.match(/^(.*)(\.)(.{1,8})$/)[3];
if(stuff!=&#39;doc&#39;)
{
alert(&#39;文件类型不正确,请选择.doc文件&#39;);
return false;
}
return true;
}


Pour le traitement php, nous utilisons uniquement if(!empty($_FILES['file']['tmp_name'])){ pour juger si il est vide. En fait, c'est également déraisonnable
Si nous pouvons le gérer comme ça

function file_type($filename)
{
    $file = fopen($filename, "rb");
    $bin = fread($file, 2); //只读2字节
    fclose($file);
    $strInfo = @unpack("C2chars", $bin);
    $typeCode = intval($strInfo[&#39;chars1&#39;].$strInfo[&#39;chars2&#39;]);
    $fileType = &#39;&#39;;
    switch ($typeCode)
    {
        case 7790:
            $fileType = &#39;exe&#39;;
            break;
        case 7784:
            $fileType = &#39;midi&#39;;
            break;
        case 8297:
            $fileType = &#39;rar&#39;;
            break;        
  case 8075:
            $fileType = &#39;zip&#39;;
            break;
        case 255216:
            $fileType = &#39;jpg&#39;;
            break;
        case 7173:
            $fileType = &#39;gif&#39;;
            break;
        case 6677:
            $fileType = &#39;bmp&#39;;
            break;
        case 13780:
            $fileType = &#39;png&#39;;
            break;
        default:
            $fileType = &#39;unknown: &#39;.$typeCode;
    }
 //Fix
 if ($strInfo[&#39;chars1&#39;]==&#39;-1&#39; AND $strInfo[&#39;chars2&#39;]==&#39;-40&#39; ) return &#39;jpg&#39;;
 if ($strInfo[&#39;chars1&#39;]==&#39;-119&#39; AND $strInfo[&#39;chars2&#39;]==&#39;80&#39; ) return &#39;png&#39;;
    return $fileType;
}
echo file_type(&#39;start.php&#39;);   // 6063 or 6033

De cette façon, nous pouvons limiter le type de fichiers téléchargés et également fournir un traitement sûr au programme.

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!

Déclaration:
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