За последние 24 часа нас посетили 33424 программиста и 1755 роботов. Сейчас ищут 1134 программиста ...

Альбомы на PHP

Тема в разделе "PHP для новичков", создана пользователем wolf777, 26 окт 2014.

  1. wolf777

    wolf777 Новичок

    С нами с:
    26 авг 2014
    Сообщения:
    207
    Симпатии:
    0
    написал такой вот скрипт

    для вывода альбома

    Код (Text):
    1. <a href="/albums{uid}_{aid}" onClick="Page.Go(this.href); return false" id="albums_name_{aid}"><div class="albums_name_page">{name}</div></a>
    2. <a href="/albums{uid}_{aid}" onClick="Page.Go(this.href); return false" id="albums_name_{aid}"><div class="caption_albums">
    сам скрипт

    Код (Text):
    1. //* Загрузка фотографии *//
    2. case "uploading":
    3.             NoAjaxQuery();
    4.        
    5. $aid = intval($_GET['aid']);
    6. $user_id = $user_info['user_id'];
    7.  
    8. //Создаем альбом
    9. $aname = 'Фотографии с моей страницы';
    10. $adescr = '';
    11. $alhash = md5(md5($server_time).$aname.$adescr.md5($user_info['user_id']).md5($user_info['user_email']).$_IP);
    12. $date_create = date('Y-m-d H:i:s', $server_time);
    13. $db->query("INSERT INTO `".PREFIX."_albums` (user_id, name, descr, ahash, adate, position, privacy, editablea) VALUES ('{$user_info['user_id']}','Фотографии с моей страницы', '', '{$alhash}', '{$date_create}', '0', '1|1', '1')");
    14. $aid = $db->insert_id();
    15. $db->query("UPDATE `".PREFIX."_users` SET user_albums_num = user_albums_num+1 WHERE user_id = '{$user_info['user_id']}'");
    16.  
    17. //* Подключаем класс для фотографий *//
    18.            
    19. include ENGINE_DIR.'/classes/images.php';
    20.            
    21.            
    22. //* Проверка на кол-во фоток в альбоме *//
    23.                
    24. if($row['photo_num'] < $config['max_album_photos']){
    25.  
    26.                     $uploaddir = ROOT_DIR.'/uploads/users/';
    27.                    
    28. //* Если нет папок юзера, то создаём их *//
    29.                    
    30.                     if(!is_dir($uploaddir.$user_id.'/albums', 0777)){
    31.                         @mkdir($uploaddir.$user_id.'/albums', 0777 );
    32.                         @chmod($uploaddir.$user_id.'/albums', 0777 );
    33.                     }
    34. //* Если нет папки альбома, то создаём её *//              
    35. $album_dir = ROOT_DIR.'/uploads/users/'.$user_id.'/albums/'.$aid.'/';
    36. if(!is_dir($album_dir)){
    37. @mkdir($album_dir, 0777);
    38. @chmod($album_dir, 0777);
    39. }
    40.            
    41. //* Разришенные форматы *//
    42.            
    43.             $allowed_files = array('jpg', 'jpeg', 'jpe', 'png', 'gif');
    44.  
    45. //* Получаем данные о фотографии *//
    46.            
    47.             $image_tmp = $_FILES['uploadfile']['tmp_name']; //* Оригинальное название для определения формата *//      
    48.             $image_name = totranslit($_FILES['uploadfile']['name']); //* Имя фотографии *//    
    49.             $image_rename = substr(md5($server_time+rand(1,100000)), 0, 15); //* Размер файла *//          
    50.             $image_size = $_FILES['uploadfile']['size']; //* Формат файла *//          
    51.             $type = end(explode(".", $image_name));
    52.  
    53. //* Проверяем если, формат верный то пропускаем *//
    54.            
    55.             if(in_array($type, $allowed_files)){
    56.                 if($image_size < 5000000){
    57.                     $res_type = '.'.$type;
    58.                    
    59. //* Директория куда загружать *//                      
    60.                        
    61.                         if(move_uploaded_file($image_tmp, $album_dir.$image_rename.$res_type)) {
    62.                    
    63. //* Создание оригинала для стены *//
    64.                        
    65.                         $tmb = new thumbnail($album_dir.$image_rename.$res_type);
    66.                         $tmb->size_auto(770);
    67.                         $tmb->jpeg_quality(95);
    68.                         $tmb->save($album_dir.'o_'.$image_rename.$res_type);
    69.  
    70.                        
    71. //* Создание уменьшеной копии 50х50 *//
    72.                        
    73.                         $tmb = new thumbnail($album_dir.$image_rename.$res_type);
    74.                         $tmb->size_auto('50x50');
    75.                         $tmb->jpeg_quality(97);
    76.                         $tmb->save($album_dir.'50_'.$image_rename.$res_type);
    77.                        
    78. //* Создание уменьшеной копии 100х100 *//
    79.                        
    80.                         $tmb = new thumbnail($album_dir.$image_rename.$res_type);
    81.                         $tmb->size_auto('100x100');
    82.                         $tmb->jpeg_quality(97);
    83.                         $tmb->save($album_dir.'100_'.$image_rename.$res_type);
    84.                        
    85. //* Создание уменьшеной копии для обложки альбома 278x226 *//
    86.                        
    87.                         $tmb = new thumbnail($album_dir.$image_rename.$res_type);
    88.                         $tmb->size_auto('278x226px');
    89.                         $tmb->jpeg_quality(90);
    90.                         $tmb->save($album_dir.'c_'.$image_rename.$res_type);
    91.                        
    92.                         $image_rename = $db->safesql($image_rename);
    93.                         $res_type = $db->safesql($res_type);
    94.                        
    95.                            
    96. //* Создание уменьшеной копии 182х182 *//
    97.                        
    98.                         $tmb = new thumbnail($album_dir.$image_rename.$res_type);
    99.                         $tmb->size_auto('182x182');
    100.                         $tmb->jpeg_quality(100);
    101.                         $tmb->save($album_dir.'182_'.$image_rename.$res_type);
    102.  
    103.                         $image_rename = $db->safesql($image_rename);
    104.                         $res_type = $db->safesql($res_type);
    105.                        
    106.                                 $date = date('Y-m-d H:i:s', $server_time);
    107.                                
    108. //* Генерируем position фотки для "обзора фотографий" *//
    109.                                
    110.                                 $position_all = $_SESSION['position_all'];
    111.                                 if($position_all){
    112.                                     $position_all = $position_all+1;
    113.                                     $_SESSION['position_all'] = $position_all;
    114.                                 } else {
    115.                                     $position_all = 100000;
    116.                                     $_SESSION['position_all'] = $position_all;
    117.                                 }
    118.  
    119. //Вставляем фотографию
    120. $db->query("INSERT INTO `".PREFIX."_photos` (album_id, photo_name, user_id, date, position) VALUES ('{$aid}', '{$image_rename}{$res_type}', '{$user_id}', '{$date}', '{$position_all}')");
    121.  
    122. //* Проверяем на наличии обложки у альбома, если нету то ставим обложку загруженную фотку *//                          
    123. if(!$row['cover'])
    124. $db->query("UPDATE `".PREFIX."_albums` SET cover = '{$image_rename}{$res_type}' WHERE aid = '{$aid}'");
    125. $db->query("UPDATE `".PREFIX."_albums` SET photo_num = photo_num+1, adate = '{$date}' WHERE aid = '{$aid}'");
    126. $img_url = $config['home_url'].'uploads/users/'.$user_id.'/albums/'.$aid.'/c_'.$image_rename.$res_type;
    127.                                
    128. //* Добавляем на стену *//
    129.                        
    130.                         $row = $db->super_query("SELECT user_sex FROM `".PREFIX."_users` WHERE user_id = '{$user_id}'");
    131.                         if($row['user_sex'] == 2)
    132.                             $sex_text = 'обновила';
    133.                         else
    134.                             $sex_text = 'обновил';
    135.                        
    136.                         $wall_text = "<div class=\"profile_update_photo\">
    137.                         <a href=\"\" onClick=\"Photo.Profile(\'{$user_id}\', \'{$image_rename}{$res_type}\'); return false\">
    138.                         <img src=\"/uploads/users/{$user_id}/albums/{$aid}/o_{$image_rename}{$res_type}\" style=\"margin-top:3px\"></a></div>";
    139.                        
    140.                         $db->query("INSERT INTO `".PREFIX."_wall` SET author_user_id = '{$user_id}', for_user_id = '{$user_id}', text = '{$wall_text}', add_date = '{$server_time}', type = '{$sex_text} фотографию на странице:'");
    141.                         $dbid = $db->insert_id();
    142.                        
    143.                         $db->query("UPDATE `".PREFIX."_users` SET user_wall_num = user_wall_num+1 WHERE user_id = '{$user_id}'");
    144.        
    145. //* Добавляем в ленту новостей *//
    146.                        
    147.                         $db->query("INSERT INTO `".PREFIX."_news` SET ac_user_id = '{$user_id}', action_type = 1, action_text = '{$wall_text}', obj_id = '{$dbid}', action_time = '{$server_time}'");
    148.                        
    149.  
    150.                         echo $config['home_url'].'uploads/users/'.$user_id.'/albums/'.$aid.'/'.$image_rename.$res_type;
    151.  
    152.                         mozg_clear_cache_file('user_'.$user_id.'/profile_'.$user_id);
    153.                         mozg_clear_cache();
    154.  
    155.                     } else
    156.                         echo 'bad';
    157.                 } else
    158.                     echo 'big_size';
    159.                     } else
    160.                     echo 'max_img';
    161.             } else
    162.                 echo 'bad_format';
    163.             die();
    164.         break;
    пытаюсь сделать альбомы как в вк, суть в том что мой альбом создается с названием "фотографии с моей страницы"
    проблема в том что aid это id альбома он задается через автоинкремент, для обычных альбомов он работает отлично, а как сделать наподобие в вк?

    смотрел у них сделано так т.е при добавлении фото на аву у них создается папка на сервере с названием 0 и добавляется в строку aid в бд тож 0 в итоге получается

    album77791555_0, где id это ид пользователя т.е 77791555 а _0 это сам альбом т.е aid, ну у меня из за автоинкремента не получается повторять для каждого пользователя значения 0, как можно решить эту проблему?
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ноль это может быть "виртуальный" альбом с мордашками пользователя. когда добавляется фото в альбом у него есть юзер-владелец (юид) и ид-альбома (аид) хранения. так вот если это пара юид-ноль то речь идет о фотках пользователя. я себе так понимаю эту логику. зачем так делано? например чтоб не плодить лишнюю альбомную запись для каждого зарегистрированного юзера.
     
  3. wolf777

    wolf777 Новичок

    С нами с:
    26 авг 2014
    Сообщения:
    207
    Симпатии:
    0
    я сделал так {uid} это ид пользователя {aid} это ид альбома, при создании альбома создается папка альбома на сервере например альбом 7 папка на сервере (где хранятся фото) тоже 7, ну как то хочется сделать чтоб у каждого пользователя создавалась папка 0 и aid тож ноль или как то так, так просто удобней, а вот как быть с aid в бд это ведь автоинкремент...

    Добавлено спустя 2 минуты 37 секунд:
    или может надо условие в tpl прописать? например создать в бд категорию categories, а в tpl прописать условие только вместо {aid} будет {cat} например, ну тогда каша будет(

    Добавлено спустя 3 минуты 27 секунд:
    смотрел в одноклассниках у них почти также id=637777704777&bid=637555607877&t=13, где id это номер пользователя в соц сети, bid это тот же {aid} а t это тип альбома
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    структуру базы я уже подсказал. у изображения должно быть пользователь-альбом. если альбом ноль значит это мордашки юзера. создавать каталоги на сервере можно но не нужно имхо.
     
  5. wolf777

    wolf777 Новичок

    С нами с:
    26 авг 2014
    Сообщения:
    207
    Симпатии:
    0
    у изображения должно быть пользователь-альбом. если альбом ноль значит это мордашки юзера.

    если честно я не совсем вас понял, мордашка это и так фотка, а причем тут пользователь - альбом
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    это о структуре базы данных.
    утрируем:
    юзеры - июд, логин, пароль (минимальный набор полей идентифицирующий пользователя)
    альбомы - аид, юид-владельца (аюид), иид-обложки (иидо), название (минимальный адекватный набор описания альбома)
    имагесы - иид, юид-владельца (июид), альбом изображения (иаид), путь-к-файлу, заголовок (юзабельный минимум)

    запросы:
    альбомы пользователя: всё из альбомов по юид'у и джойним все из имагесов по паре иид-иидо
    имагесы в альбоме: все из имагесов по аиду
    "изображения на странице пользоватея": (то что я назвал мордашками): всё из имагесов по июд'у где аид ноль
    проверка хранилища: все пути из имагесов

    и так далее...
    это не решает задачи шаринга изображений "как в соцсетях" но вполне реализует некий простенький фотохостинг.
     
  7. wolf777

    wolf777 Новичок

    С нами с:
    26 авг 2014
    Сообщения:
    207
    Симпатии:
    0
    да вы правы, я ща пересмотрел как сделано в вк, получается у них действительно 0 это виртуальный альбом с мордашками пользователей, только интересно как он разработан
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    свое разработайте. поймете плюсы-минусы со временем - придумаете что-то новое.
     
  9. wolf777

    wolf777 Новичок

    С нами с:
    26 авг 2014
    Сообщения:
    207
    Симпатии:
    0
    Ganzal спасибо огромное за помощь