Помощь распознавания загрузки файлов PHP! - PullRequest
0 голосов
/ 10 мая 2011

РЕШЕН МОЙ СОБСТВЕННЫЙ ВОПРОС! СПАСИБО ВСЕМ ЗА ПОМОЩЬ :)

Ok. У меня проблемы с кодом ниже, распознающим загрузку FILE TYPE и работающим с правильной функцией. Я могу загрузить PNG очень хорошо, и он будет конвертировать и изменять размер, как и должен, но GIF и JPEG не делают, а просто возвращают черное изображение. Если я удаляю код png и пробую остальные, они будут работать по отдельности. Я не могу понять это в настоящее время, почему, когда я объединяю их, они не будут работать. Все вместе они используют любую функцию, которая стоит на первом месте, вместо FILE TYPE

if ($width > $max_width){
    $scale = $max_width/$width;
    if ($_FILE['image']['type'] = "image/png"){
    $uploaded = resizeImagePNG($large_image_location,$width,$height,$scale);
    } elseif ($_FILE['image']['type'] = "image/gif"){
    $uploaded = resizeImageGIF($large_image_location,$width,$height,$scale);
    } elseif ($_FILE['image']['type'] = "image/jpeg" || $_FILE['image']['type'] = "image/pjpeg"){
    $uploaded = resizeImageJPG($large_image_location,$width,$height,$scale);
    }
    session_start();
    $_SESSION['image2resize'] = $large_image_location;
    }else{
    $scale = 1;
    if ($_FILE['image']['type'] = "image/png"){
    $uploaded = resizeImagePNG($large_image_location,$width,$height,$scale);
    } elseif ($_FILE['image']['type'] = "image/gif"){
    $uploaded = resizeImageGIF($large_image_location,$width,$height,$scale);
    } elseif ($_FILE['image']['type'] = "image/jpeg" || $_FILE['image']['type'] = "image/pjpeg"){
    $uploaded = resizeImageJPG($large_image_location,$width,$height,$scale);
    }
    session_start();
    $_SESSION['image2resize'] = $large_image_location;
    }
}

Ответы [ 3 ]

3 голосов
/ 10 мая 2011

edit: в сочетании с методом Пекки для пантомимы и переписано для ясности

Во всех ваших сравнениях if / elseif есть ошибка.Вы должны поставить double == вместо single =

Вы можете использовать этот код, который должен делать то же самое, но более чистым и безопасным способом

$info = getimagesize(($_FILE['image']['tmp_name']); 
$mime = $info["mime"];

if ($width > $max_width){
    $scale = $max_width/$width;
} else {
    $scale = 1;
}

switch ($mime)
{
    case "image/png":
        $uploaded = resizeImagePNG($large_image_location,$width,$height,$scale);
        break;

    case "image/gif":
        $uploaded = resizeImageGIF($large_image_location,$width,$height,$scale);
        break;

    case "image/jpeg":
        $uploaded = resizeImageJPG($large_image_location,$width,$height,$scale);
        break;

    default:
        // do a better handling of the error
        die('image type not supported');
}

session_start();
$_SESSION['image2resize'] = $large_image_location;

Кроме того, не полагайтесьна $_FILE['image']['type'], так как это значение отправляется браузером, и злоумышленник может его подделать.Используйте метод getimagesize() для получения типа файла, как предложил Пекка в своем ответе.

2 голосов
/ 10 мая 2011

@ Карлос отвечает на ваш вопрос.

В качестве примечания, я бы вообще не полагался на сервер MIME-типа браузером пользователя и использовал бы getimagesize() для обнаружениятип файла вместо.

$info = getimagesize(($_FILE['image']['tmp_name']); 
$mime = $info["mime"];

, что безопаснее.

0 голосов
/ 11 мая 2011

выяснил это !!!!!!!!Проверка все испортила.Вместо того, чтобы проверить, если это не изображение, я проверил, если это было, и он начал работать.НОВАЯ проверка -> if ($ mime == 'image / gif' || $ mime == 'image / jpeg' || $ mime == 'image / pjpeg' || $ mime == 'image / png' ||$ _FILES ['image'] ['size'] <3000000) {рабочий код здесь} else {код ошибки здесь}.Спасибо за помощь! </p>

...