Проверьте, является ли изображением JPEG

Существуют некоторые проблемы, которые стоит заметить, имеете ли Вы дело с классами, которые сохраняются с помощью Картопостроителя Объектных Отношений (ORM), любят, в спящем режиме, если Вы не думали, что это уже было необоснованно сложно!

Ленивые загруженные объекты являются подклассами

, Если Ваши объекты будут сохранены с помощью ORM, во многих случаях Вы будете иметь дело с динамическими прокси для предотвращения загружаемого объекта слишком рано от хранилища данных. Эти прокси реализованы как подклассы Вашего собственного класса. Это означает, что this.getClass() == o.getClass() возвратится false. Например:

Person saved = new Person("John Doe");
Long key = dao.save(saved);
dao.flush();
Person retrieved = dao.retrieve(key);
saved.getClass().equals(retrieved.getClass()); // Will return false if Person is loaded lazy

, Если Вы имеете дело с ORM, с помощью o instanceof Person, единственная вещь, которая будет вести себя правильно.

Ленивые загруженные объекты имеют пустые поля

, ORMs обычно используют методов get для принуждения загрузки ленивых загруженных объектов. Это означает, что person.name будет null, если person будет ленив загруженный, даже если person.getName() загрузка сил и возвращает "John Doe". По моему опыту, это неожиданно возникает чаще в hashCode() и equals().

, Если Вы имеете дело с ORM, удостоверьтесь, что всегда использовали методов get, и никогда ссылки поля в [1 111] и equals().

Сохранение объекта изменит свое состояние

, Постоянные объекты часто используют id поле для удержания клавиши объекта. Это поле будет автоматически обновлено, когда объект будет сначала сохранен. Не используйте идентификационное поле в [1 114]. Но можно использовать его в [1 115].

шаблон А, который я часто использую,

if (this.getId() == null) {
    return this == other;
}
else {
    return this.getId().equals(other.getId());
}

, Но: Вы не можете включать getId() в [1 117]. Если Вы делаете, когда объект сохраняется, hashCode изменения. Если объект будет в HashSet, Вы никогда не будете находить его снова.

В моем Person пример, я, вероятно, использовал бы getName() для [1 122] и getId() плюс [1 124] (только для паранойи) для [1 125]. Это хорошо, если существует некоторый риск "коллизий" для [1 126], но никогда хорошо для [1 127].

hashCode() должен использовать не изменяющееся подмножество свойств от [1 129]

8
задан Whymarrh 30 November 2014 в 17:16
поделиться

4 ответа

Попробуйте функцию изображения exif_imagetype .

Пример:

if(exif_imagetype($filepath) != IMAGETYPE_JPEG){
    echo 'Not a JPEG image';
}
24
ответ дан 5 December 2019 в 05:03
поделиться

Почему бы вам не попробовать создать массив исключений (файлы, которые вы хотите, чтобы пользователь мог загружать) .

// Hyperlink for your website
$hyperlink = "http://www.yourwebsitehere.com";

if($_FILES['fname']['error'] > 0)
{
    $image= $hyperlink . "/holder.jpg";
} 
else
{
    $image = $hyperlink . "/" . $_FILES['fname']['name'];
}

// Only accept files of jpeg format
$exceptions = array("image/jpg", "image/jpeg", "image/pjpeg");

foreach($exceptions as $value)
{
    if($_FILES['fname']['type'] != $value)
    {
        echo "I only accept jpeg images!";
        break; // Or exit();
    }
}
1
ответ дан 5 December 2019 в 05:03
поделиться

PHP имеет такую ​​хорошую поддержку типов изображений, мне интересно, почему вы ограничиваете свое приложение. Всего с помощью пары строк кода вы можете работать с любым входным форматом и конвертировать в jpeg, если это необходимо ...

$im = imagecreatefrompng(input_filename)
imagejpeg($im, output_filename);
4
ответ дан 5 December 2019 в 05:03
поделиться

При использовании $ _ FILES вы полагаетесь на информацию, отправленную клиентом, что не лучший вариант (вы видели, что это не всегда одно и то же, и, если я правильно помню, $ _ FILES ['...'] ['type'] можно подделать).

Если вы используете PHP> = 5.3 (или можете установить пакеты PECL) , может быть, вы можете взглянуть на расширение Fileinfo . Если вы используете старую версию, как насчет mime_content_type ?

И, как сказал Скотт, почему разрешается только jpeg?

Присмотритесь к коду лучше: когда вы в первом случае ( error> 0 ), вы назначаете файл по умолчанию для $ imgData ? Почему вокруг «гиперссылки» есть пробелы? И почему вы всегда используете для проверки content-type , даже если на пару строк раньше была ошибка?

В заключение, смотрели ли вы руководство ( Обработка загрузка файлов )?

1
ответ дан 5 December 2019 в 05:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: