Check Upload tipo di file da un array in PHP.
-
18-09-2019 - |
Domanda
Come posso controllare se un'estensione del file e il tipo MIME sono in un array questo è il codice ho attualmente.
$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');
Poi giù dove sto controllando se il file è un tipo valido ho questo ciclo foreach
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;
}
Il problema è che, se il tipo di file non è tutti i tipi di della serie (che è impossibile) ottengo un errore. Si lavora per il punto in cui se il file di caricamento è nella matrice che messaggio di errore non si innescherà.
Soluzione 3
Il modo in cui sto facendo questo ora è:
$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;
}
Il vantaggio di questo è che permetterà un file .gif con un mimo di jpeg. Quindi non forza la miniera e l'estensione in modo che corrisponda ma non assicurarsi che siano entrambi i tipi di immagine.
Altri suggerimenti
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;
}
Questo dovrebbe cercare una stringa corretta incollato sia il tipo e l'estensione.
Un altro modo è quello di modificare il ciclo così:
$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;
}
mi piace per ottenere la matrice dei file e quindi utilizzare un literating ciclo foreach su possibili condizioni
$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);
}
return $ msg;