Created
March 16, 2011 14:46
-
-
Save nergal/872595 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Аплоад файла с расширенной проверкой типа | |
* | |
* @throws Zend_File_Transfer_Exception | |
* @param string $filename | |
* @param array $allowed_types | |
* @return string | |
*/ | |
private function upload($filename, Array $allowed_types) | |
{ | |
$parts = getimagesize($filename); | |
if ($parts AND isset($allowed_types[$parts['mime']])) { | |
if (file_exists($filename)) { | |
// Проверка на размер файла | |
// (в php.ini (upload_max_filesize и post_max_size) и в nginx.conf (client_max_body_size) всегда должно | |
// быть значение больше, чтобы сервер не перекрыл этот обработчик) | |
if (filesize($filename) > 2048000) { | |
throw new Zend_File_Transfer_Exception('Размер изображения не должен превышать 2 мегабайта.'); | |
} | |
// Вычисление нового имени файла - его хэш и случайное значение | |
// (чтобы одинаковые фотки разных пользователей были разными физически) | |
$fname = md5_file($filename) . uniqid() . "." . $allowed_types[$parts['mime']]; | |
// Формирование имени файла: | |
// папка(два первых символа хэша), под папка(черыре симвоа со второй позиции) | |
$dest = realpath(APPLICATION_PATH . "/../public/pictures/galleries/"); | |
$dest.= "/" . substr($fname, 0, 2) . "/" . substr($fname, 2, 4) . "/"; | |
// Рекурсивное создание директорий, если их нет | |
if (!is_dir($dest)) { | |
mkdir($dest, 0777, true); | |
} | |
// Ресайз фотки, если она больше 650x768 | |
$image = new Fan_Image_Transform($filename, new Fan_Image_Driver_Gd); | |
if($image->getWidth() > 650) { | |
$image->fitToWidth(650)->save($filename); | |
} | |
if($image->getHeight() > 768) { | |
$image->fitToHeight(768)->save($filename); | |
} | |
// Перенос файла в постоянное место из временной папки | |
move_uploaded_file($filename, "{$dest}{$fname}"); | |
return $fname; | |
} | |
} | |
return FALSE; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment