Joostina CMS / CMF v2.* API
  • Docs
  • Package
  • Class
  • Tree
  • Todo
Overview

Packages

  • Components
    • Acls
      • Models
        • Admin
        • Site
    • BlogCategory
      • Models
        • Admin
        • Site
    • Blogs
      • Controllers
        • Admin
        • Site
      • Helpers
      • Models
        • Admin
        • Site
    • Coder
      • Controllers
        • Admin
      • Models
        • Admin
    • Comments
      • Controllers
        • Admin
        • Site
      • Helpers
      • Models
        • Admin
        • Site
    • CommentsCounter
      • Models
        • Admin
        • Site
    • Mainpage
      • Controllers
        • Site
    • News
      • Controllers
        • Admin
        • Site
      • Helpers
      • Models
        • Admin
        • Site
    • Pages
      • Controllers
        • Admin
        • Site
      • Models
        • Site
    • Search
      • Controllers
        • Site
    • Site
      • Controllers
        • Admin
        • Site
    • Sitemap
      • Controllers
        • Admin
        • Site
      • Models
        • Admin
        • Site
    • Test
      • Controllers
        • Site
    • Torrents
      • Controllers
        • Site
    • Users
      • Controllers
        • Admin
        • Site
      • Models
        • Admin
        • Site
  • Compression
  • Core
    • Libraries
      • Arhive
      • Array
      • Attached
      • Autoadmin
      • Autoloader
      • Benchmark
      • Breadcrumbs
      • Cache
      • Config
      • Cookie
      • Csrf
      • Database
        • Drivers
          • Interfaces
      • Datetime
      • Debug
      • Editor
      • Events
      • File
      • Filter
      • Flashmessage
      • Folder
      • Hit
      • Html
      • Image
      • Inflector
      • Inputfilter
      • Libraries
      • Mail
      • Module
      • Nestedset
      • Pager
      • Pages
      • Params
      • Randomizer
      • Request
      • RobotLoader
      • Route
      • Security
      • Session
      • Static
      • String
      • Text
      • Trash
      • Validate
  • Email
  • Extra
    • Libraries
      • Basket
  • Joostina
    • Controller
    • Core
    • Document
  • JSMin
  • Libraries
    • Extra
      • Basket
        • Models
          • Site
  • None
  • Plugins
    • Autoadmin
    • Editor
    • Sitemap
  • SimpleMail
  • Vendors
    • Libraries
      • Email

Classes

  • helperAcl
  • joosAdminToolbarButtons
  • joosAdminView
  • joosAdminViewToolbarEdit
  • joosAdminViewToolbarListing
  • joosAutoadminHTML
  • joosTemplater
  • joosValidateHelper
  • modelAdminCoder_Faker
  • moduleActions
  • moduleActionsLogin
  • moduleActionsMenu
  • moduleActionsNews
  • moduleActionsTest
  • Route
  • rulesValidation
  • TreeBuilder

Interfaces

  • joosAutoadminPluginsEdit
  • joosAutoadminPluginsTable

Exceptions

  • joosAutoadminClassPlugionNotFoundException
  • joosAutoadminFilePluginNotFoundException
  • joosAutoloaderClassNotFoundException
  • joosAutoloaderFileNotFoundException
  • joosAutoloaderOnStartFileNotFoundException
  • joosCacheException
  • joosCoreException
  • joosDatabaseException
  • joosException
  • joosFileLibrariesException
  • joosFolderLibrariesException
  • joosImageLibrariesException
  • joosModulesException
  • joosSimpleMailException
  • joosUploadLibrariesException
  • joosUserException
  • JSMinException

Functions

  • navigation_ul_li_recurse
  • quoted_printable_encode
  1: <?php defined('_JOOS_CORE') or exit();
  2: 
  3: /**
  4:  * Работа с файлами
  5:  *
  6:  * @version    1.0
  7:  * @package    Core\Libraries
  8:  * @subpackage File
  9:  * @category   Libraries
 10:  * @author     Joostina Team <info@joostina.ru>
 11:  * @copyright  (C) 2007-2012 Joostina Team
 12:  * @license    MIT License http://www.opensource.org/licenses/mit-license.php
 13:  * Информация об авторах и лицензиях стороннего кода в составе Joostina CMS: docs/copyrights
 14:  *
 15:  * @todo оценить необходимость использования clearstatcache
 16:  *
 17:  * */
 18: class joosFile
 19: {
 20:     /**
 21:      * Логическое представление размера файлов, памяти и прочив байтовых данных
 22:      *
 23:      * @tutorial joosFile::convert_size(123);
 24:      * @tutorial joosFile::convert_size(123456);
 25:      *
 26:      * @param  string     $num исходные строка или число для форматирования
 27:      * @return string|int
 28:      */
 29:     public static function convert_size($num)
 30:     {
 31:         $num = (double) $num;
 32: 
 33:         if ($num >= 1073741824) {
 34:             $num = round($num / 1073741824 * 100) / 100 . ' ' . 'gb';
 35:         } elseif ($num >= 1048576) {
 36:             $num = round($num / 1048576 * 100) / 100 . ' ' . 'mb';
 37:         } elseif ($num >= 1024) {
 38:             $num = round($num / 1024 * 100) / 100 . ' ' . 'kb';
 39:         } else {
 40:             $num .= ' ' . 'byte';
 41:         }
 42: 
 43:         return $num;
 44:     }
 45: 
 46:     /**
 47:      * Создание файла
 48:      * @tutorial joosFile::create( JPATH_BASE . DS. 'create_file.php', $content );
 49:      * @param  string $file_name Полный путь к файлу
 50:      * @param  mixed  $data      Содержимое файла
 51:      * @return mixed  Результат создания (false при неудаче)
 52:      */
 53:     public static function create($file_name, $data)
 54:     {
 55:         return file_put_contents($file_name, $data, LOCK_EX);
 56:     }
 57: 
 58:     /**
 59:      * Удаление файла
 60:      *
 61:      * @tutorial joosFile::delete( JPATH_BASE . DS. '_to_delete.php' );
 62:      *
 63:      * @param string $file_name полный путь к файлу, либо массив полный путей к удаляемым файлам
 64:      *
 65:      * @return bool результат удаления
 66:      */
 67:     public static function delete($file_name)
 68:     {
 69:         self::exception_if_file_not_exists($file_name);
 70: 
 71:         return unlink((string) $file_name);
 72:     }
 73: 
 74:     /**
 75:      * Проверка существования файла
 76:      *
 77:      * @tutorial joosFile::exists( JPATH_BASE . DS. 'index.php' );
 78:      *
 79:      * @param string $file_name
 80:      *
 81:      * @return bool результат проверки
 82:      */
 83:     public static function exists($file_name)
 84:     {
 85:         return (bool) (file_exists($file_name) && is_file($file_name));
 86:     }
 87: 
 88:     /**
 89:      * Получение MIME типа файла
 90:      *
 91:      * @tutorial  joosFile::get_mime_content_type( __FILE__ );
 92:      * @tutorial  joosFile::get_mime_content_type( JPATH_BASE . DS . 'media' . DS . 'favicon.ico' );
 93:      * @tutorial  joosFile::get_mime_content_type( JPATH_BASE . DS . 'media' . DS . 'js' . DS . 'jquery.js');
 94:      *
 95:      * @param string $file_name
 96:      *
 97:      * @return string
 98:      */
 99:     public static function get_mime_content_type($file_name)
100:     {
101:         if (function_exists('finfo_open')) {
102:             $options = defined('FILEINFO_MIME_TYPE') ? FILEINFO_MIME_TYPE : FILEINFO_MIME;
103:             $info = finfo_open($options);
104: 
105:             if ($info && ($result = finfo_file($info, $file_name)) !== false) {
106:                 return $result;
107:             }
108:         }
109: 
110:         if (function_exists('mime_content_type') && ($result = mime_content_type($file_name)) !== false) {
111:             return $result;
112:         }
113: 
114:         return self::get_mime_content_type_by_extension($file_name);
115: 
116:     }
117: 
118:     /**
119:      * Получение MIME типа файла по расширению
120:      *
121:      * @tutorial  joosFile::get_mime_content_type_by_extension( __FILE__ );
122:      * @tutorial  joosFile::get_mime_content_type_by_extension( JPATH_BASE . DS . 'media' . DS . 'favicon.ico' );
123:      * @tutorial  joosFile::get_mime_content_type_by_extension( JPATH_BASE . DS . 'media' . DS . 'js' . DS . 'jquery.js');
124:      *
125:      * @param string $file_name
126:      *
127:      * @return string
128:      */
129:     public static function get_mime_content_type_by_extension($file_name)
130:     {
131:         $mime_types = array( // all
132:             'txt' => 'text/plain', 'htm' => 'text/html', 'html' => 'text/html', 'php' => 'text/html', 'css' => 'text/css', 'js' => 'application/javascript', 'json' => 'application/json', 'xml' => 'application/xml', 'swf' => 'application/x-shockwave-flash', 'flv' => 'video/x-flv', 'sql' => 'text/x-sql', // images
133:             'png' => 'image/png', 'jpe' => 'image/jpeg', 'jpeg' => 'image/jpeg', 'jpg' => 'image/jpeg', 'gif' => 'image/gif', 'bmp' => 'image/bmp', 'ico' => 'image/vnd.microsoft.icon', 'tiff' => 'image/tiff', 'tif' => 'image/tiff', 'svg' => 'image/svg+xml', 'svgz' => 'image/svg+xml', 'tga' => 'image/x-targa', 'psd' => 'image/vnd.adobe.photoshop', // archives
134:             'zip' => 'application/zip', 'rar' => 'application/x-rar-compressed', 'exe' => 'application/x-msdownload', 'msi' => 'application/x-msdownload', 'cab' => 'application/vnd.ms-cab-compressed', 'gz' => 'application/x-gzip', 'tgz' => 'application/x-gzip', 'bz' => 'application/x-bzip2', 'bz2' => 'application/x-bzip2', 'tbz' => 'application/x-bzip2', 'tar' => 'application/x-tar', '7z' => 'application/x-7z-compressed', // audio/video
135:             'mp3' => 'audio/mpeg', 'qt' => 'video/quicktime', 'mov' => 'video/quicktime', 'avi' => 'video/x-msvideo', 'dv' => 'video/x-dv', 'mp4' => 'video/mp4', 'mpeg' => 'video/mpeg', 'mpg' => 'video/mpeg', 'wm' => 'video/x-ms-wmv', 'mkv' => 'video/x-matroska', // adobe
136:             'pdf' => 'application/pdf', 'ai' => 'application/postscript', 'eps' => 'application/postscript', 'ps' => 'application/postscript', // ms office
137:             'doc' => 'application/msword', 'rtf' => 'application/rtf', 'xls' => 'application/vnd.ms-excel', 'ppt' => 'application/vnd.ms-powerpoint', // open office
138:             'odt' => 'application/vnd.oasis.opendocument.text', 'ods' => 'application/vnd.oasis.opendocument.spreadsheet');
139: 
140:         $file_info = pathinfo($file_name);
141:         $ext = $file_info['extension'];
142:         if (isset($mime_types[$ext])) {
143:             return $mime_types[$ext];
144:         } else {
145:             return 'application/octet-stream';
146:         }
147:     }
148: 
149:     /**
150:      * Формирование вложенного пути к файлу с учетом разделения по каталогам
151:      *
152:      * @tutorial joosFile::make_file_location( 1 );
153:      * @tutorial joosFile::make_file_location( 123 );
154:      * @tutorial joosFile::make_file_location( 123456789123456789 );
155:      *
156:      * @param integer $id - номер файла в БД
157:      *
158:      * @return string - путь к файлу в структуре подкаталогов
159:      *
160:      * @todo задокументировать новые параметры
161:      */
162:     public static function make_file_location($id, $split_by = 3, $capacity = 9, $round = false)
163:     {
164:         // округляем
165:         $id = $round ? (int) round($id / $round) : $id;
166: 
167:         if (!is_integer($id)) {
168:             throw new joosFileLibrariesException('Параметр $id должен иметь цельночисленное значение');
169:         }
170: 
171:         if (!is_integer($split_by)) {
172:             throw new joosFileLibrariesException('Параметр $split_by должен иметь цельночисленное значение');
173:         }
174: 
175:         if (!is_integer($capacity)) {
176:             throw new joosFileLibrariesException('Параметр $capacity должен иметь цельночисленное значение');
177:         }
178: 
179:         $p = sprintf('%0' . $capacity . 'd', $id);
180:         $h = str_split($p, $split_by);
181: 
182:         return implode('/', $h);
183:     }
184: 
185:     /**
186:      * Получение полной информации о файле
187:      *
188:      * @tutorial joosFile::file_info( __FILE__ );
189:      * @tutorial joosFile::file_info( JPATH_BASE . DS. 'index.php'  );
190:      * @tutorial joosFile::file_info( 'index.html' );
191:      *
192:      * @param string $file_name абсолюютный или относительный путь до файла
193:      *
194:      * @return array массив информации о файле
195:      *          mime - mime тип файла
196:      *          size - размер файла в байтах
197:      *          ext - расширение файла
198:      *          name - имя файла с расширением
199:      *
200:      * @todo переделать на SplFileInfo
201:      */
202:     public static function file_info($file_name)
203:     {
204:         self::exception_if_file_not_exists($file_name);
205: 
206:         $f = pathinfo($file_name);
207: 
208:         $r = array();
209:         $r['mime'] = self::get_mime_content_type($file_name);
210:         $r['size'] = filesize($file_name);
211:         $r['ext'] = isset($f['extension']) ? $f['extension'] : '';
212:         $r['name'] = $f['basename'];
213: 
214:         return $r;
215:     }
216: 
217:     /**
218:      * Преобразование имени файла к безопасному для файлвоой системы виду
219:      * Из строки удаляются все спецсимволы, кирилические символы транслитерируются
220:      *
221:      * @tutorial  joosFile::get_safe_name('имя файла номер 1 - ( раз)');
222:      * @tutorial  joosFile::get_safe_name(' eminem feat dr.dre i need a doctor.mp3 ');
223:      *
224:      * @param type $file_name
225:      *
226:      * @return type
227:      */
228:     public static function make_safe_name($file_name)
229:     {
230:         // убираем непроизносимые русские мязкие звуки
231:         $file_name = str_ireplace(array('ь', 'ъ'), '', $file_name);
232:         // переводим в транслит
233:         $file_name = joosText::russian_transliterate($file_name);
234:         // в нижний регистр
235:         $file_name = strtolower($file_name);
236:         // заменям все ненужное нам на "-"
237:         $file_name = str_replace(array("'", '-'), ' ', $file_name);
238:         $file_name = preg_replace('/[^\-a-z0-9\._]+/u', '-', $file_name);
239: 
240:         return trim($file_name, '-');
241:     }
242: 
243:     /**
244:      * Получение даты последнего изменения файла
245:      *
246:      * @param  string                     $file_name абсолюютный или относительный путь до файла
247:      * @return bool
248:      * @throws joosFileLibrariesException
249:      */
250:     public static function get_modified_date($file_name)
251:     {
252:         self::exception_if_file_not_exists($file_name);
253: 
254:         return filemtime($file_name);
255:     }
256: 
257:     /**
258:      * Получение размера файла ( в байта )
259:      *
260:      * @param  string                     $file_name абсолюютный или относительный путь до файла
261:      * @return type
262:      * @throws joosFileLibrariesException
263:      */
264:     public static function get_size($file_name)
265:     {
266:         self::exception_if_file_not_exists($file_name);
267: 
268:         return filesize($file_name);
269:     }
270: 
271:     /**
272:      * Получение типа файла
273:      *
274:      * @param  string                     $file_name абсолюютный или относительный путь до файла
275:      * @return type
276:      * @throws joosFileLibrariesException
277:      */
278:     public static function get_type($file_name)
279:     {
280:         self::exception_if_file_not_exists($file_name);
281: 
282:         return filetype($file_name);
283:     }
284: 
285:     /**
286:      * Записи данных в файл
287:      *
288:      * @param  string                     $file_name абсолюютный или относительный путь до файла
289:      * @param  string                     $data      данные для записи в файл
290:      * @return type
291:      * @throws joosFileLibrariesException
292:      */
293:     public static function put_content($file_name, $data)
294:     {
295:         self::exception_if_file_not_exists($file_name);
296: 
297:         if (!joosFile::is_writable($file_name)) {
298:             throw new joosFileLibrariesException('Файл :file не доступен для записи', array(':file' => $file_name));
299:         }
300: 
301:         return file_put_contents($file_name, $data, LOCK_EX);
302:     }
303: 
304:     /**
305:      * Получение содержимого файла
306:      *
307:      * @param  string                     $file_name абсолюютный или относительный путь до файла
308:      * @return type
309:      * @throws joosFileLibrariesException
310:      */
311:     public static function get_content($file_name)
312:     {
313:         self::exception_if_file_not_exists($file_name);
314: 
315:         if (!joosFile::is_writable($file_name)) {
316:             throw new joosFileLibrariesException('Файл :file не доступен для чтения', array(':file' => $file_name));
317:         }
318: 
319:         return file_get_contents($file_name);
320:     }
321: 
322:     /**
323:      * Проверка прав доступа на запись в файл
324:      *
325:      * @param string $file_location полный путь к каталогу
326:      *
327:      * @return bool результат проверки доступа на запись в указанный каталог
328:      */
329:     public static function is_writable($file_location)
330:     {
331:         return (bool) is_writable($file_location);
332:     }
333: 
334:     /**
335:      * Проверка прав доступа на чтение файла
336:      *
337:      * @param string $file_location полный путь к каталогу
338:      *
339:      * @return bool результат проверки доступа на запись в указанный каталог
340:      */
341:     public static function is_readable($file_location)
342:     {
343:         return (bool) is_readable($file_location);
344:     }
345: 
346:     /**
347:      * Внутренний метод проверки существования файла
348:      * В случае ошибки выбрасывает исключение joosFileLibrariesException
349:      *
350:      * @static
351:      * @param $file_name путь к файлу
352:      * @throws joosFileLibrariesException
353:      */
354:     private static function exception_if_file_not_exists($file_name)
355:     {
356:         if (!joosFile::exists($file_name)) {
357:             throw new joosFileLibrariesException('Файл :file не существует', array(':file' => $file_name));
358:         }
359:     }
360: }
361: 
362: /**
363:  * Обработчик ошибок для библиотеки joosFile
364:  */
365: class joosFileLibrariesException extends joosException
366: {
367: }
368: 
Joostina CMS / CMF v2.* API API documentation generated by ApiGen 2.6.1 – Template adapted by @olvlv and Joostina Team