سؤال

كيف يمكنني التحقق مما إذا كان ملحق الملف ونوع MIME في صفيف هذا هو الرمز الذي لدي حاليا.

$upload_project_thum = $_FILES['upload_project_thum']['name'];
$upload_project_thum_ext = substr($upload_project_thum, strrpos($upload_project_thum, '.') + 1);    
$upload_permitted_types= array('image/jpeg:jpg','image/pjpeg:jpg','image/gif:gif','image/png:png');

ثم أسفل حيث أتحقق من ذلك ما إذا كان الملف نوع صالح، لدي هذه الحلقة

foreach ($upload_permitted_types as $image_type) {
        $type = explode(":", $image_type);
            if (($type[0] != $_FILES['upload_project_thum']['type']) &&  ($upload_project_thum_ext != $type[1]) ) {
                $errmsg_arr[] = 'Please select a jpg, jpeg, gif, or png image to use as the project thumbnail'. $type[1] . " Type: ". $type[0];
                $errflag = true;
        }  

المشكلة هي أنه إذا كان نوع الملف ليس كل الأنواع في الصفيف (وهذا أمر مستحيل) أحصل على خطأ. إنه يعمل إلى النقطة التي إذا كان الملف التحميل في الصفيف، فلن تؤدي رسالة الخطأ.

هل كانت مفيدة؟

المحلول 3

الطريقة التي أفعلها الآن هي:

    $upload_permitted_types['mime']= array('image/jpeg','image/gif','image/png');
$upload_permitted_types['ext']= array('jpeg','jpg','gif','png');

if(!in_array($_FILES['upload_project_thum']['type'],$upload_permitted_types['mime']) || !in_array($upload_project_thum_ext,$upload_permitted_types['ext'])
{
       $errmsg_arr[] = 'Please select a jpg, jpeg, gif, or png image to use as the project thumbnail';
       $errflag = true;
}

ميزة هذا هو أنه سيسمح لملف .gif مع ميم من JPEG. لذلك لا يجبر المنجم والامتداد للمطابقة ولكنه تأكد من أن كلا من أنواع الصور.

نصائح أخرى

if (!in_array($_FILES['upload_project_thum']['type'], $upload_permitted_types)){

   exit("Unsupported file type");
}
if( !in_array( $_FILES['upload_project_thum']['type'] . ':' . $upload_project_thum_ext, $upload_permitted_types) ) {
    Trigger-error-here;
}

يجب أن يبحث هذا عن سلسلة مناسبة لصقها من النوع والملحق.

طريقة أخرى هي تعديل حلقة الخاص بك مثل هذا:

$is_allowed = false;
foreach ($upload_permitted_types as $image_type) {
    $type = explode(":", $image_type);
    if (($type[0] == $_FILES['upload_project_thum']['type']) && ($type[1] == $upload_project_thum_ext ) ) {
        $is_allowed = true;
        break;
    }
}

if( !$is_allowed ) {
        $errmsg_arr[] = 'Please select a jpg, jpeg, gif, or png image to use as the project thumbnail'. $type[1] . " Type: ". $type[0];
        $errflag = true;
}

أحب الحصول على صفيف الملفات ثم استخدام حلقة Foreach المجهزة بالظروف الممكنة

$is_error = TRUE;

$allowFileTypes = array(
            "image/png","image/jpg","image/jpeg"
        );

$UserBaseFolder = 'userfiles/'.$_SESSION['user_id'];
            if(!file_exists($UserBaseFolder)) {
            mkdir("userfiles/".$_SESSION['user_id']."/");
        } 



    if ($_FILES['file']['error'] === UPLOAD_ERR_OK) { 
        foreach($_FILES as $dat => $f) {
                if($f['size'] == "0") {
                    $msg .= '<p><span class="alert alert-danger">You must upload a file.</span></p>';
                    $is_error = FALSE;
                }

                if($f['size'] > "2000000") {
                    $msg .= '<p><span class="alert alert-danger">Your file size is too big.</span></p>';
                    $is_error = FALSE;
                }


                if(!in_array($f['type'],$allowFileTypes)){
                    $msg .= '<p><span class="alert alert-danger">Your file has invalid format. Please try again...</span></p>';
                    $is_error = FALSE;
                } else {
                $filepath = $UserBaseFolder.'/'.time().'-'.$f['name'];
                move_uploaded_file($f["tmp_name"], $filepath);
                }

عودة $ msg؛

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top