1. PHP / Говнокод #26566

    +2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    function get_page() {
        $routes = Utility::get_routes('', 'admin/*', '[0-9a-z\.\/\-]*');
    
        $entities = [];
        foreach ($routes as $key => $value) {
            $entities[$value['entity_type']][$value['entity']][] = $value;
        }
    
        $map = [
            'core' => Utility::get_string('Ядро'),
            'base' => Utility::get_string('Базовое'),
            'custom' => Utility::get_string('Пользовательское')
        ];
    
        $menu = [];
        if ($entities) {
            $entities = [
                'core' => $entities['core'] ?? [],
                'base' => $entities['base'] ?? [],
                'custom' => $entities['custom'] ?? []
            ];
    
            foreach ($entities as $key => $value) {
                $count = 0;
                foreach ($value as $key2 => $value2) {
                    $index = $map[$key];
                    $entity = str_replace('_', ' ', $key2);
                    $entity_upper = ucfirst($key2);
                    $title = $route = '';
    
                    $on = false;
                    $items = [];
                    foreach ($value2 as $key3 => $value3) {
                        if ((!isset($value3['menu']) || $value3['menu']) && (!isset($value3['type']) || $value3['type'] == 'replace') && (!isset($value3['access']) || (new User)->get_access($value3['access']))) {
                            $first = count(explode('/', $value3['route'])) <= 2;
    
                            if (!$title && $first) {
                                $title = $value3['title'] ?? $entity_upper;
                                $route = $value3['route'];
                            }
    
                            $items[$value3['route']] = $value3['title'] ?? $entity_upper;
    
                            $on = true;
                        }
                    }
    
                    if ($on) {
                        $menu[$index][$key2] = [
                            'title' => $title ?: $entity_upper,
                            'title_link' => $route ?: 'admin/'.$entity,
                            'items' => $items,
                            'tr' => $count && $count % 3 === 0 ? '</tr><tr>' : '',
                        ];
    
                        $count++;
                    }
                }
            }
        }
    
        return $menu;
    }

    eqsash-2.0.zip/eqsash-2.0/core/admin/admin.php
    >>> Eqsash
    >>> Премиум технологии

    Запостил: gost, 09 Апреля 2020

    Комментарии (36) RSS

    • function admin() {
          $page = isset($_GET['page']) ? (int)($_GET['page']) : 1;
          $total = Database::select('content')->fetch('count');
          $pages_num = ceil($total / 50);
      
          $pager = '';
          for ($i = 1; $i <= $pages_num; $i++) {
              $active = $page === $i ? 'class="link-active"' : '';
              $pager .= '<a '.$active.'href="/admin/content?page='.$i.'">'.$i.'</a> ';
          }
      
          $page = is_numeric($page) ? ($page - 1) * 50 : 0;
      
          $content = Database::select('content')
              ->sort('created', 'DESC')
              ->limit(50, $page)
              ->fetch('assoc_all');
          // ...

      core/content/content.php

      Нихуя себе, макака написала код без(?) инъекций!
      Ответить
      • >без инъекций
        посредством кода
        $page = is_numeric($page) ? ($page - 1) * 50 : 0;


        да?
        ахуеть)))

        а еще этот код удобно поддается щаблонозации, да и тестированию тоже
        Ответить
        • Очень гибкий и расширяемый код! Вот, например, очень гибкая и расширяемая обёртка над БД:
          class Database {
              // [...]
          
              public $prefix = '';
              //public $settings = [];
          
          	static function get($new = false, $settings = []) {
          		if (!self::$instance || $new) {
          			$settings = $settings ?: Utility::get_settings()['database'];
          
          			self::$instance = new self;
          			//self::$instance->settings = $settings;
          			self::$instance->prefix = $settings['prefix'] ?? '';
          			self::$instance->driver = (new Mysql)->get($settings);
          		}
          
                  return self::$instance;
              }
          Ответить
          • удобно писать датабейс агностик код

            При этом у пыхеров есть PDO, но они поверх него пишут еще менее гибкое говно

            Зачем? Чтобы сделать код хуже, потому что чем код хуже -- тем программист на пхп лучше
            Ответить
            • Зачем? Любая пыхомакака мечтает стать не простым шаблонизаторщиком, а "настоящим программистом", потому обязательно хоть раз пытается написать свой шаблонизатор (на шаблонизаторе, лол), свою ORM (ну или хотя бы DBAL), а потом объединить всё это чудо в принципиально новый супериновационный фреймворк. Но потом вдруг оказыватся, что для этого всего необходимо думать, чего пыхомакака не умеет, и ничего из перечисленного не пишется за 15 минут, а пыхомакака хочет всё и сразу. В результате имеем:
              - пародию на шаблонизатор с XSS и эвалом
              - пародию на ORM с SQL инъекциями
              - нахуй никому не нужный очередной абсолютно неюзабельный недофреймворк
              Ответить
              • Немакака, покажи что ты написал. Писать в одно рыло свой фреймверк - очень геморойная затея, а они уже написаны. А писать начинают от безисходности, видя какое вокруг говно. Напитоне пояему-то нмкто не начинает косплеить джангу или даже фласк.
                Ответить
                • нахуя писать свой фреймворк вооще?

                  Почему питанист берет алчеми или джангу, а пыхер пишет класс class Database ? нахуя?
                  Ответить
                  • У готовых фреймворков слишком много бойлерплейта и плохая производительность
                    Ответить
        • Инъекции то здесь нет ?
          Ответить
          • Нет. Здесь инфекция. Инъекция будет уже потом, когда ты будешь дергаться.
            Ответить
        • Тестировать пхп код ? Это шутка такая ?
          Ответить
          • Под тестированием он, видимо, имеет в виду "открыть страничку и посмотреть, что всё на месте".
            Ответить
            • Скорее, залить файлик по фтп и отписать заказчику "Сделал, проверяйте"
              Ответить
              • и пойти спокойно на пикабу, да
                Ответить
              • Изменить файлик по фтп*, т.к. 20 проектов одновременно держать на локалке тяжело
                Ответить
                • Тяжело будет гробовщику, который станет копать для тебя могилу.
                  Засунь за пояс 2 тысячи.
                  Ответить
            • Борманд, как работает запуск виртуальных машин при эмуляции bios (не uefi)? Машина же ожидает, что процессор стартует в реальном режиме, однако он не может запускать сегменты с реальным кодом, так как он уже в long mode.

              Более того, Intel явно требует, что бы код VMX был протектед и в страничном режиме (AMD, внезапно, нет)
              The biggest difference between VT-x and AMD-V is that AMD-V provides a more complete virtualization environment. VT-x requires the VMX non-root code to run with paging enabled, which precludes hardware virtualization of real-mode code and non-paged protected-mode software. This typically only includes firmware and OS loaders, but nevertheless complicates VT-x hypervisor implementation. AMD-V does not have this restriction.
              http://underpop.online.fr/v/virtualbox/details-about-hardware-virtualization-virtualbox.html.gz



              Виртуализаторы чтоли софтварно эмулируют реальный режим для загрузки?

              А если я дос запущу, то получится полностью софтварная реализация, как досбокс?
              Ответить
              • Да, эмулировали софтом пока интелы тоже не завезли unrestricted guest.
                Ответить
                • Данке, теперь понятно
                  Ответить
                  • Ну вообще странный ход с их стороны, имхо.

                    99% пользователей виртуалок совершенно похуй, через что там грузится ось (в hyper-v второго поколения, к примеру, вообще никакие устройства не эмулируются и всем похуй). А UEFI 16-битным кодом не пользуется, оно через десяток инструкций уже в long mode.

                    Видимо unrestricted guest какие-то ещё полезные фичи даёт помимо запуска древнего говна.
                    Ответить
                    • Может, авторам виртуалок не похуй, да и скорость загрузки может быть чуть выше наверное.

                      У второго поколения гиперв всё синтетическое, да? То-есть ОС без поддержки hyper-v отсосет. А грузятся они через uefi уже, да?

                      Где читать про этот мод? в третьем волуме интела?
                      Ответить
                    • всё, моя почиталъ третий томъ.

                      К каждому вротуальному процу привязана же структура VMCS. Так вот unrestricted guest там просто флажок.
                      А дальше всё работает примерно как в v86: проц запускает код из 16ти битново сегмента, вызовы интерруптов и IO перехватываются, и отправляются в гипервизор (через map) а тот уже косплеит там какой-нить древний чипсет интеловский, 8259, 8042, и прочую несуществующую уже питущню.

                      Верно понл?
                      Ответить
    • >value3
      блядь

      ></tr><tr>
      тыр тыр митя
      Ответить
    • Жопой чую, что половина кода находится в классе "Utility"...
      Ответить
      • Втягивая воздух, ты засосал и меня. Мама мио, как тут неприбрано у тебя.
        Кому нужно это вазелиновое масло?, да?
        Ответить
    • static function build_mail($to, $subject, $text, $from, $files = []) {
      		$subject = "=?utf-8?B?".base64_encode($subject)."?=";
      
      		$header = 'From: '.$from."\r\n";
      		$header .= 'Mime-Version: 1.0'."\r\n";
      
      		if (!$files) {
      			$header .= 'Content-type: text/html; charset=UTF-8'."\r\n";
      			$header .= 'Content-Transfer-Encoding: 8bit'."\r\n";
      
      			$message = $text;
      		} else {
      			$boundary = strtoupper(uniqid(time()));
      
      			$header .= 'Content-Type: multipart/mixed;';
      			$header .= 'boundary="----------'.$boundary.'"'."\r\r\n\n";
      
      			$message = '------------'.$boundary."\r\n";
      			$message .= 'Content-Type: text/html; charset=UTF-8'."\r\n";
      			$message .= 'Content-Transfer-Encoding: 8bit'."\r\r\n\n";
      			$message .= $text."\r\r\n\n";
      
      			foreach ($files as $filename) {
      				$f = fopen($filename, 'rb');
      
      				$message .= '------------'.$boundary."\r\n";
      				$message .= 'Content-Type: application/octet-stream;';
      				$message .= 'name="'.basename($filename).'"'."\r\n";
      				$message .= 'Content-Transfer-Encoding: base64'."\r\n";
      				$message .= 'Content-Disposition: attachment;';
      				$message .= 'filename="'.basename($filename).'"'."\r\r\n\n";
      				$message .= chunk_split(base64_encode(fread($f, filesize($filename))))."\r\n";
      			}
      
      		}
      
      		mail($to, $subject, $message, $header);
      	}

      Неужели в "PHP" нет более простого способа отправить письмо, кроме как собирать его руками?
      Ответить
      • Сложно что-ли? У каждого пхпшника должна быть своя заготовленная библиотека с полезными функциями, которую можно тягать в свои проекты.
        Ответить
        • Я думаю, такое должно быть у любого программиста, если только это не программист программ приветствия мира.
          Ответить
      • Есть готовые пакеты, но зачем же жить в мире без квадратных колес?
        Ответить

    Добавить комментарий