PHP表单上传 - 文件留空时扩展无效

时间:2016-11-10 11:52:31

标签: php html forms post file-upload

我有一个php表单,允许多次上传已接受的扩展名:

$allowedExtensions = array("pdf","doc","docx","gif","jpeg","jpg","png","rtf","txt");

如果延伸无效,请输入:

if(!in_array($ext,$allowedExtensions)) {
            die("File $file_name has the extensions $ext which is not allowed");
    }

当一个字段留空时,我收到错误“文件有不允许的扩展名”。我已经尝试在数组中添加一个空的“”,这是一个空白文件的扩展名吗?

最好的方法是什么?是否在未填写时加载预设图像或是否有人有解决方案?

这是源代码,也许可以帮助其他人:

<?php

 error_reporting(E_ALL);
 ini_set('display_errors', 1);

if(isset($_FILES) && (bool) $_FILES) {

    $allowedExtensions = array("pdf","doc","docx","gif","jpeg","jpg","png","rtf","txt");

    $files = array();
    foreach($_FILES as $name=>$file) {
        $file_name = $file['name']; 
        $temp_name = $file['tmp_name'];
        $file_type = $file['type'];
        $path_parts = pathinfo($file_name);
        $ext = $path_parts['extension'];
        if(!in_array($ext,$allowedExtensions)) {
            die("File $file_name has the extensions $ext which is not allowed");

        }
        array_push($files,$file);
    }


    // email fields: to, from, subject, and so on
    $to = "<info@xxx.co.uk>";
    $from = "<info@xxx.co.uk>"; 
    $subject ="test attachment"; 
    $message = "this is a test message";
    $headers = "From: $from";

    $band = $_POST['band'];

    // boundary 
    $semi_rand = md5(time()); 
    $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 

    // headers for attachment 
    $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\""; 

    // multipart boundary 
    $message = $band;
    $message = "This is a multi-part message in MIME format.\n\n" . "--{$mime_boundary}\n" . "Content-Type: text/plain; charset=\"iso-8859-1\"\n" . "Content-Transfer-Encoding: 7bit\n\n" . $message . "\n\n"; 
    $message .= "--{$mime_boundary}\n";

    // preparing attachments
    for($x=0;$x<count($files);$x++){
        $file = fopen($files[$x]['tmp_name'],"rb");
        $data = fread($file,filesize($files[$x]['tmp_name']));
        fclose($file);
        $data = chunk_split(base64_encode($data));
        $name = $files[$x]['name'];
        $message .= "Content-Type: {\"application/octet-stream\"};\n" . " name=\"$name\"\n" . 
        "Content-Disposition: attachment;\n" . " filename=\"$name\"\n" . 
        "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
        $message .= "--{$mime_boundary}\n";
    }
    // send

    $ok = mail($to, $subject, $message, $headers); 
    if ($ok) { 
    echo "<p>photos sent!</p>"; 
    } else { 
        echo "<p>mail could not be sent!</p>"; 
    } 
}   

?>

0 个答案:

没有答案