Постоянно создаются пустые папки в папке upload?

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО InstantCMS 2.X
#16 1 марта 2017 в 21:47


На то она и фича, что её не исправить. smileЭто как бы особенность движка.

Lora

Как эту фичу исправить? Чтоб было, как раньше! Чтобы не заниматься дополнительной работой для скрипта — удалять пустые папки.
#17 1 марта 2017 в 23:24
Для себя решил так:
  1. <?php
  2. function isEmptyDir($dir){
  3. return (($files = scandir($dir)) && count($files) <= 2);
  4. }
  5. function Find_Empty_Dir_Del($dir) {
  6. //если не открыть директорию
  7. if (!$dd = opendir($dir)) return false;
  8. //читаем директорию в цикле
  9. while (false !== ($obj = readdir($dd)))
  10. {
  11. //пропускаем системные каталоги
  12. if($obj=='.' || $obj=='..')continue;
  13. //Если не файл рекурсивно просматриваем папку
  14. if (!is_file($dir.'/'.$obj)) Find_Empty_Dir_Del($dir.'/'.$obj);
  15. }
  16. closedir($dd);
  17. if (isEmptyDir($dir))
  18. if (!@rmdir($dir))
  19. echo 'Не удалось удалить папку -> ',$dir,' возможно нет прав.','<br/>';
  20. else
  21. echo 'Удалена папка -> ',$dir,'<br/>';
  22. }
  23.  
  24. Find_Empty_Dir_Del('upload');
  25. ?>
Скрипт корректно удаляет пустые папки в из каталога "upload", быстро и легко, выдает отчет со списком удаленных директорий.
#18 2 марта 2017 в 09:22
Как сохранять файлы по старому без приблуд со скриптами? И без новым фитч!
#19 2 марта 2017 в 09:40

Но, а всё-таки без приблуд со скриптами. Как сохранять файлы по старому?

dimanwwwwww
Откатиться на старую версию и больше не обновляться.
#20 2 марта 2017 в 22:21
Как я понимаю решения пока ни у кого нет. Все смирились с обновлением. Либо есть какой-нибудь другой способ?
#21 2 марта 2017 в 23:55
dimanwwwwww,
Я Вам удивляюсь. Вам подсказали четыре рабочих способа и показали пальцем что надо делать.
В файле \system\core\uploader.php меняете функцию getUploadDestinationDirectory на аналогичную из старого движка:

  1. public function getUploadDestinationDirectory(){
  2.  
  3. $cfg = cmsConfig::getInstance();
  4. $user = cmsUser::getInstance();
  5.  
  6. $dir_num_user = sprintf('%03d', intval($user->id/100));
  7. $dir_num_file = sprintf('%03d', intval($user->files_count/100));
  8. $dest_dir = $cfg->upload_path . "{$dir_num_user}/u{$user->id}/{$dir_num_file}";
  9.  
  10. if(!is_dir($dest_dir)){
  11.  
  12. @mkdir($dest_dir, 0777, true);
  13. @chmod($dest_dir, 0777);
  14. @chmod(pathinfo($dest_dir, PATHINFO_DIRNAME), 0777);
  15.  
  16. }
  17.  
  18. return $dest_dir;
  19.  
  20. }
Конечно, когда накопится файлов — это будет слегка тормозить систему, но Вам, гляжу, скорость не важна, но зато мешают пустые папки.
#22 5 марта 2017 в 18:36


dimanwwwwww,
Я Вам удивляюсь. Вам подсказали четыре рабочих способа и показали пальцем что надо делать.
В файле \system\core\uploader.php меняете функцию getUploadDestinationDirectory на аналогичную из старого движка:

Конечно, когда накопится файлов — это будет слегка тормозить систему, но Вам, гляжу, скорость не важна, но зато мешают пустые папки.

Ris

Ваш вариант не работает!

Нашел решение. Путь получится такой: "/upload/images/u2/имя папки сгенерировано по текущий день/11a96367.jpg". Правит нужно в 2 функциях:
В файле \system\core\uploader.php меняете функции getUploadDestinationDirectory и resizeImage к виду:
  1. public function getUploadDestinationDirectory(){
  2.  
  3. $dir_num_user = intval($this->user_id);
  4. $dir_num_file = substr(md5($this->user_id . $user->files_count . date('Ymd')), 0, 8);
  5.  
  6. $dest_dir = $this->site_cfg->upload_path . "images/u{$this->user_id}/{$dir_num_file}";
  7.  
  8. if(!is_dir($dest_dir)){
  9. @mkdir($dest_dir, 0777, true);
  10. @chmod($dest_dir, 0777);
  11. @chmod(pathinfo($dest_dir, PATHINFO_DIRNAME), 0777);
  12. }
  13.  
  14. return $dest_dir;
  15.  
  16. }
  17.  
  1. public function resizeImage($source_file, $size){
  2.  
  3. $dest_dir = $this->getUploadDestinationDirectory();
  4. $dest_ext = pathinfo($source_file, PATHINFO_EXTENSION);
  5. $dest_file = substr(md5($user->id . $user->files_count . microtime(true) . $size['width'] ), 0, 8) . '.' . $dest_ext;
  6.  
  7. $dest_file = $dest_dir . '/' . $dest_file;
  8.  
  9. if (!isset($size['height'])) { $size['height'] = $size['width']; }
  10. if (!isset($size['quality'])) { $size['quality'] = 90; }
  11.  
  12. if (img_resize($source_file, $dest_file, $size['width'], $size['height'], $size['is_square'], $size['quality'])) {
  13.  
  14. return str_replace($this->site_cfg->upload_path, '', $dest_file);
  15.  
  16. }
  17.  
  18. return false;
  19.  
  20. }
  21.  
#23 5 марта 2017 в 19:56
Решение найдено. Всем спасибо!
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.