Como limitar o tipo de arquivo a ser carregado?

Eu tenho um modelo de página personalizado com um formulário, que qualquer visitante do site pode fazer o upload de um arquivo. Agora, eu quero restringir o tipo de arquivo que será carregado (docx, doc e pdf somente) e eu limitar o tamanho do arquivo em apenas 2MB.

Como fazer isso? Eu já tenho uma function que o usuário permitiu fazer o upload, mas não sei como restringir o tipo de arquivo que permitiu o upload. Por favor me ajude.

Eu tentei mudar

'post_mime_type' => $file_return['type']

nisso

'post_mime_type' => 'application/msword,vnd.openxmlformats-officedocument.wordprocessingml.document,pdf'

mas ainda não está funcionando.

PHP no modelo de página personalizado

 if(isset($_POST['submit'])){ $firstName = isset($_POST['firstName']) ? $_POST['firstName'] : ''; $middleName = isset($_POST['middleName']) ? $_POST['middleName'] : ''; $lastName = isset($_POST['lastName']) ? $_POST['lastName'] : ''; $email = isset($_POST['email']) ? $_POST['email'] : ''; $mobile = isset($_POST['mobile']) ? $_POST['mobile'] : ''; $locations = isset($_POST['locations_list']) ? $_POST['locations_list'] : ''; $position = isset($_POST['position']) ? $_POST['position'] : ''; $message = isset($_POST['message']) ? $_POST['message'] : ''; if( ! empty($_FILES)){ $file=$_FILES['resumeFile']; $attachment_id = upload_user_file($file); } $sql=$wpdb->query($wpdb->prepare("INSERT INTO resume_databank(submit_time,last_name,first_name,middle_name,mobile_number,email,location,position,message,process_resume,attachment_resume_id) VALUES (now(),'$lastName','$firstName','$middleName','$mobile','$email','$locations','$position','$message','No','$attachment_id')")); } 

PHP em functions.php

 function upload_user_file($file = array()){ require_once(ABSPATH . 'wp-admin/includes/admin.php'); $file_return = wp_handle_upload($file, array('test_form' => false)); if(isset($file_return['error']) || isset($file_return['upload_error_handler'])){ return false; } else { $filename = $file_return['file']; $attachment = array( 'post_mime_type' => $file_return['type'], 'post_title' => preg_replace('/\.[^.]+$/', '', basename($filename)), 'post_content' => '', 'post_status' => 'inherit', 'guid' => $file_return['url'] ); $attachment_id = wp_insert_attachment($attachment, $file_return['url']); require_once(ABSPATH . 'wp-admin/includes/file.php'); $attachment_data = wp_generate_attachment_metadata($attachment_id, $filename); wp_update_attachment_metadata($attachment_id, $attachment_data); if(0 < intval($attachment_id)){ return $attachment_id; } } return false; } 

Solutions Collecting From Web of "Como limitar o tipo de arquivo a ser carregado?"

Este é um exemplo completo de trabalho com limites de tamanho e tamanho de arquivo e todo o tratamento de erros.

Cada passo é comentado. Deixe-me saber se você tem mais perguntas.

  • Você pode encontrar todos os tipos de mime daqui .
  • Certifique-se de verificar se é permitido no WP também.

 // Allowed file types -> search online for desired mime types $allowed_file_types = array( "image/jpeg", "image/jpg", "image/png" ); // Allowed file size -> 2MB $allowed_file_size = 2000000; $upload_errors = ''; // Check if has a file -> this assumes your file input "name" is "uploaded-file" if ( ! empty( $_FILES['uploaded-file']['name'] ) ) { // Check file type if ( ! in_array( $_FILES['uploaded-file']['type'], $allowed_file_types ) ) { $upload_errors .= '

Invalid file type: ' . $_FILES['uploaded-file']['type'] . '. Supported file types: jpg, jpeg, png

'; } // Check file size if ( $_FILES['uploaded-file']['size'] > $allowed_file_size ) { $upload_errors .= '

File is too large. Max. upload file size is 2MB

'; } // No errors -> upload image if ( empty( $upload_errors ) ) { if ( $_FILES['uploaded-file']['error'] !== UPLOAD_ERR_OK ) __return_false(); require_once( ABSPATH . 'wp-admin/includes/file.php' ); // Upload the file -> if you don't want to attach it to post, pass $post_id as 0 $upload_id = media_handle_upload( 'uploaded-file', $post_id ); if ( is_wp_error( $upload_id ) ) { // Error uploading the file -> show it echo '

Upload failed. Please submit again

'; } else { // No errors -> show success message echo '

Upload was successful

'; } } // Had an error -> show error(s) else { echo $upload_errors; } }

Você simplesmente adiciona uma declaração if como:

     se ($ file ["type"]! = "application / pdf") {
         Saída;
     }

Você pode adicionar uma mensagem em $ _SESSION e redirect a URL para mostrar ao usuário o que está errado

 se (session_id () == '') {
     session_start ();
 }
 $ _SESSION ['error_uplaod'] = '.pdf com arquivos de 2MB maxsize só é permitido';
 session_write_close ();
 wp_redirect ($ _SERVER ["REQUEST_URI"]);

de outra forma, se você quiser usar $ mimes:

 funcione your_mimes ($ mimes) {
   $ mimes = array ('pdf' => 'application / pdf');
   retornar $ mimes;
 }

Você pode ver a lista de todos os tipos: aqui , logo antes e depois do método de upload, adicione:

 add_filter ('upload_mimes', 'your_mimes');

e:

 remove_filter ('upload_mimes', 'your_mimes');

Se você deixar isso sem remover, então isso será aplicado para todos os uploads no site depois de executá-lo.
Espero que ajude você