Я реализую скрипт, который проверяет изображение для загрузки с использованием php. На самом деле, php-скрипт хорошо работает с файлом изображения gif, png и jpg, но когда у меня есть одно условие:
theFileName.bmp
и переименовал его расширение в theFileName.jpg
. Я переименовал имя файла изображения вручную на свой компьютер, а затем я выбрал файл для загрузки.
Процесс загрузки занял около 2 или 3 секунд, после чего ничего не появилось (даже не ошибка), отображается только сообщение по умолчанию из браузера:
Соединение с локальным хостом было прервано.
Как я могу запретить пользователю выбирать файл изображения (и любой другой файл, если на то пошло), который не является действительным действительным изображением?
Наконец, мне удалось найти собственные решения. Это немного долго, но, по крайней мере, это может сделать работу! Надеюсь, это может помочь кому-то.
Есть еще много вещей, чтобы проверить и проверить, чтобы убедиться, что это безопасно с помощью этого средства.
# CHECK & TRY READ IMAGE FILE function is_readable_image( $theTmpFileloc ){ try { if ( !getimagesize( $theTmpFileloc ) ){ # THE IMAGE IS UNREADABLE return false; } # THE IMAGE IS READABLE return true; }catch( Exception $e ){ # THE IMAGE IS OTHER FILE return false; } } # READ AND RETURN AN ARRAY OF IMAGE SIZES function get_image_size( $theTmpFileloc ){ $imageSizes = array(); $tmpResults = getimagesize( $theTmpFileloc ); $imageSizes['width'] = $tmpResults[0]; $imageSizes['height'] = $tmpResults[1]; # IF EITHER WIDTH OR HEIGHT = 0, RETURN FALSE if ( $tmpResults[0] == 0 || $tmpResults[1] == 0 ) { return false; } return $imageSizes; } # READ AND RETURN AN IMAGE ACTUAL MIMETYPE function get_image_mime( $theTmpFileloc ){ $imageMime = ''; $tmpResults = getimagesize( $theTmpFileloc ); $imageMime = $tmpResults['mime']; return $imageMime; } # START OF PHP TO VALIDATE IMAGE FILE if ( isset($_FILES['postImage']) && !empty($_FILES['postImage']['name']) ) { $tmpFileLoc = $_FILES['postImage']['tmp_name']; $array_file_type = array('image/gif', 'image/png', 'image/x-png', 'image/jpeg', 'image/pjpeg'); if ( $_FILES['postImage']['error'] == 1 ) { # THE IMAGE FILE CONTAINS ERROR $resMessage['Error'] = true; }elseif ( !is_uploaded_file( $tmpFileLoc ) ) { # PREVENT FROM UPLOADING FROM EXTERNAL SOURCE NOT HTTP $resMessage['Error'] = true; }elseif ( !is_readable_image( $tmpFileLoc ) ) { # PREVENT FROM IMAGE IS INVALID OR OTHER MIMETYPE $resMessage['Error'] = true; }elseif ( !get_image_size( $tmpFileLoc ) ) { # PREVENT FROM IMAGE SIZE 0, 0 OR INVALID ACTUAL MIMETYPE $resMessage['Error'] = true; }elseif ( !in_array( get_image_mime( $tmpFileLoc ), $array_file_type) ) { # LEVEL 2 OF CHECKING AN IMAGE MIMETYPE $resMessage['Error'] = true; }else { # other checks with file extension, max_size, # dir is_writable and so on then move to move_uploaded_file } }