Существуют некоторые проблемы, которые стоит заметить, имеете ли Вы дело с классами, которые сохраняются с помощью Картопостроителя Объектных Отношений (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]
Попробуйте функцию изображения exif_imagetype .
Пример:
if(exif_imagetype($filepath) != IMAGETYPE_JPEG){
echo 'Not a JPEG image';
}
Почему бы вам не попробовать создать массив исключений (файлы, которые вы хотите, чтобы пользователь мог загружать) .
// 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();
}
}
PHP имеет такую хорошую поддержку типов изображений, мне интересно, почему вы ограничиваете свое приложение. Всего с помощью пары строк кода вы можете работать с любым входным форматом и конвертировать в jpeg, если это необходимо ...
$im = imagecreatefrompng(input_filename)
imagejpeg($im, output_filename);
При использовании $ _ FILES
вы полагаетесь на информацию, отправленную клиентом, что не лучший вариант (вы видели, что это не всегда одно и то же, и, если я правильно помню, $ _ FILES ['...'] ['type']
можно подделать).
Если вы используете PHP> = 5.3 (или можете установить пакеты PECL) , может быть, вы можете взглянуть на расширение Fileinfo . Если вы используете старую версию, как насчет mime_content_type
?
И, как сказал Скотт, почему разрешается только jpeg?
Присмотритесь к коду лучше: когда вы в первом случае ( error> 0
), вы назначаете файл по умолчанию для $ imgData
? Почему вокруг «гиперссылки» есть пробелы?
И почему вы всегда используете для проверки content-type
, даже если на пару строк раньше была ошибка?
В заключение, смотрели ли вы руководство ( Обработка загрузка файлов )?