PHP Загрузить файл фильтрации - PullRequest
0 голосов
/ 08 января 2012

Я пытаюсь написать скрипт загрузки, который принимает только PNG изображения при загрузке. Скрипт загрузки работает нормально, но когда я добавляю обнаружение изображения png, он ломается.

Вот как я это настроил:

if ($_FILES) {

        if ($_FILES["file"]["type"] == "image/png") {

        $target_path = "uploads/";
        $target_path = $target_path . basename( $_FILES['uploadedfile']['name']); 

        if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
            echo "The file ".  basename( $_FILES['uploadedfile']['name']). 
            " has been uploaded";
        } else{
            echo "There was an error uploading the file, please try again!";
        }

        } else { echo "Not A PNG…";

        }

    }

Когда я загружаю изображение PNG, я получаю сообщение об ошибке «не png» - есть идеи?

Ответы [ 3 ]

3 голосов
/ 08 января 2012

Похоже, что вы неверно ссылаетесь на файл в операторе IF:

if ($_FILES["file"]["type"] == "image/png") {

должно быть

if ($_FILES["uploadedfile"]["type"] == "image/png") {

("file" должен быть "uploadedfile")

2 голосов
/ 08 января 2012
  1. Никогда не используйте $_FILES[...]['type'] для чего-либо. Это произвольная строка, предоставленная пользователем, которая может иметь или не иметь никакого отношения к реальному файлу.
  2. Поэтому, проверьте тип MIME самостоятельно.
  3. Включите error_reporting(E_ALL); ini_set('display_errors', true);, что поможет вам найти конкретную опечатку.
  4. Привыкнуть к преждевременному отказу .

Пример для 2 и 4:

if (!empty($_FILES['uploadedfile'])) {
    if ($_FILES['uploadedfile']['error'] !== UPLOAD_ERR_OK) {
        die('Error during upload');
    }
    if (exif_imagetype($_FILES['uploadedfile']['tmp_name']) !== IMAGETYPE_PNG) {
        die('Wrong file type');
    }
    ...
}
2 голосов
/ 08 января 2012

Я видел, что некоторые серверы не добавляют mime-тип image / png в переменную $ _FILES ... есть немного более тяжелый процесс CPU:

if (@imagecreatefrompng($_FILES["file"]["tmp_name"])

Производительность здесь будет немного снижена, так как вы используете библиотеку GD для открытия холста изображения

Если проблема связана с производительностью или отсутствием библиотеки GD, просто проверьте расширение:

if (strtolower(end(explode('.',$_FILES["file"]["name"])) == 'png')

Примечание Если вы хотите использовать функцию imagecreatefrompng , рекомендуется убедиться, что GD установлен: if (function_exists('imagecreatefrompng'))


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

if ($image = @imagecreatefrompng($_FILES["file"]["tmp_name"]) {
  // Do something
  imagedestroy($image);
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...