English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Три常用的 дизайн-паттерна PHP

Не будем говорить лишнее, сразу предоставим код, который будет выглядеть следующим образом:

<?php
/**
* Класс загрузки файлов
* @author lijiamin
* @time 2017-02-17
* @email [email protected]
*/
class Upload{
private $allowExt = array('gif','jpg','jpeg','bmp','png','swf'); // Ограничение расширений файлов для загрузки
private $maxSize = 1; // Ограничение максимального размера загружаемого файла 1M
/**
* Получение информации о файле
* @param str $flag Идентификатор загружаемого файла
* @return arr Массив информации о загружаемом файле
*/
public function getInfo($flag){
return $_FILES[$flag];
}
/**
* Получение суффикса файла
* @param str $filename Имя файла
* @return str Расширение файла
*/
public function getExt($filename){
return pathinfo($filename,PATHINFO_EXTENSION);
}
/**
* Проверка合法性 загружаемого файла
* @param str $filename Имя файла
* @return bool Валидность расширения файла
*/
private function checkExt($filename){
$ext = $this->getExt($filename);
return in_array($ext,$this->allowExt);
}
/**
* Проверка размера файла на ограничения
* @param int size Размер файла
* @return bool Размер файла превышает ограничения?
*/
public function checkSize($size){
return $size < $this->maxSize * 1024 * 1024;
}
/**
* Случайное имя файла
* @param int $len Длина случайного имени файла
* @return str Случайная строка
*/
public function randName($len=6){
return substr(str_shuffle('abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ234565789'),0,$len);
}
/**
* Создаёт путь для загрузки файла
* @return str Путь к загрузке файла
*/ 
public function createDir(){
//Путь к загружаемому файлу
$dir = './upload/'.date('Y/m/d',time());
//Проверка наличия папки, если её нет, то создаётся
if(is_dir($dir) || mkdir($dir,0777,true)){
return $dir;
}
}
/**
* Загрузка файла
* @param str $flag Флаг загрузки файла
* @return array Возвращает имя загруженного файла, путь к сохранению
*/
public function uploadFile($flag){
if($_FILES[$flag]['name'] === '' || $_FILES[$flag]['error'] !== 0){
echo "Нет загруженных файлов";
return;
}
$info = $this->getInfo($flag);
if(!$this->checkExt($info['name'])){
echo "Неподдерживаемый тип файла";
return;
}
if(!$this->checkSize($info['size'])){
echo "Размер файла exceeds limit";
return;
}
$filename = $this->randName().'.'.$this->getExt($info['name']);
$dir = $this->createDir();
if(!move_uploaded_file($info['tmp_name'], $dir.'/'.$filename)){
echo "Файл не был загружен";
}else{
return array('filename'=>$filename,'dir'=>$dir);
}
}
}
?>

Заявление: содержимое статьи взято из Интернета, авторские права принадлежат соответствующему автору, контент предоставлен пользователями Интернета, сайт не имеет права собственности, не был отредактирован вручную, не несет ответственности за соответствующие юридические вопросы. Если вы обнаружите спорное содержимое, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (во время отправки письма замените # на @) для сообщения о нарушении и предоставьте соответствующие доказательства. При подтверждении факта нарушения сайт немедленно удаляет спорное содержимое.

Основной учебник
Руководство по Redis