php вопрос проверки формата фото - PullRequest
0 голосов
/ 19 июля 2009

У меня проблема с проверкой формата изображения кода:

// 0 means a successful transfer
if ($_FILES["fname"]["error"] > 0) {
    $_FILES["fname"]["name"] = "holder.jpg";        // line 3
    $imgData = $hyperlink.$_FILES["fname"]["name"]; // line 4
} else {
    $imgData = $hyperlink.$_FILES["fname"]["name"];
}

// Only accept files of jpeg format
$img = substr($imgData, 37);
$_FILES["fname"]["type"] = $img;

print "****";

print $_FILES["fname"]["type"];

//print $img;

print "****";

// only accept jpg images pjpeg is for Internet Explorer.. should be jpeg
if (!($_FILES["fname"]["type"] == "image/pjpeg") || !($_FILES["fname"]["type"== "image/jpg")) {
    print "I only accept jpg files!"; 
    exit(0);
}

Всегда идет к первому if стату (строки 3 и 4). Если я не загружаю фотографии и когда идет проверка if, чтобы проверить формат, и это дает мне , я принимаю только файлы jpg . Я предполагаю, что он принимает это как строку, так что он говорит: Я принимаю только файлы JPG .

Ответы [ 2 ]

2 голосов
/ 19 июля 2009
!($_FILES["fname"]["type"] == "image/pjpeg") || !($_FILES["fname"]["type"== "image/jpg")

совпадает с

!( ($_FILES["fname"]["type"] == "image/pjpeg") && ($_FILES["fname"]["type"== "image/jpg") )

В этой форме вы можете лучше видеть, что $ _FILES ["fname"] ["type"] никогда не может быть равным как "image / pjpeg", так и "image / jpeg", поэтому условие всегда выполняется.

1 голос
/ 19 июля 2009

Было бы лучше проверить, что файл на самом деле является JPEG, а не что MIME-тип при отправке был JPEG. Посмотрите на функцию exif_imagetype () или getimagesize () .

<?php

  if (exif_imagetype($_FILES['fname']['tmp_name']) != IMAGETYPE_JPEG) {
    echo "Image is not a JPEG!";
    exit;
  }

Если exif_imagetype недоступен, getimagesize должен работать:

<?php
   if ((list($width, $height, $type, $attr) = getimagesize($_FILES['fname']['tmp_name'])) !== FALSE) {
     if ($type != IMAGETYPE_JPEG) {
       echo "Image is not a JPEG!";
       exit;
     }
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...