Куча говна / Говнокод #26676 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
Помните шутку про 1С/C++/CSH программиста?
Так вот: парень хочет работать с COM портом, но почему-то COM объект в Windows не создается.


https://phpclub.ru/talk/threads/%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0-failed-to-create-com-object.86770/

Запостил: MAKAKA MAKAKA, (Updated )

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

  • SEO:
    --А как правильно: Иран или Ирак?
    --Вроде, и так, и так говорят
    Ответить
    • Тут пиздец, причём полный. Чувака, который вообще не разбирается в программировании, посадили писать на «PHP» скрипт по управлению кассовым аппаратом.
      Ответить
  • А может ему надо работать с .COM файлом? Например COMMAND.COM
    Ответить
  • > что не так с рнр или со мной?

    Что он там, транзистор припаять не может?
    Ответить
    • Транзистор - шеечный, вроде Спидолы?.. В музей отдайте, на СВ-ДВ давно уже только шорохи. Под них говорят сношаться неплохо.
      Ответить
  • дебил продолжает свой бой

    причем в том форуме все остальные тоже дебилы, и главному дебилу помочь не могут
    Ответить
      • он не может создать ком объект, но все обсуждают, что пых не может работать с оборудованием
        Ответить
      • да, если ты знаешь протокол.
        Но он работает с ним через "AddIn.Line8".
        Скорее всего 1С его видит, потому что .dllка лежит в той же папке, что и 1С
        А не втой, где его денвер
        Ответить
        • Кстати, у моего метода два недостатка:
          1. Нет доступа к параметрам порта (скорость и т. п.).
          2. Невозможно обрабатывать прерывания. Например, нам нужно быстро среагировать, когда внешняя железка в порт что-то послала, а в остальное время не нагружать систему.
          Ответить
            • Значит, нативное расширение нужно писать. В «Пекле» ничего готового для «UART»/«RS-232»/«COM» не гуглится.
              Ответить
              • а иктл ваш шаблоназатор умеет?

                но вообще еще раз почеркну, что работать надо через КОМ ОБЪЕКТ жи

                Скажут, он мол не ком объект
                Вовсе, а ком порт
                Ответить
                • Кокококонкретно в этой задаче придётся использовать COM-объект. У торгового оборудования проприетарный протокол. Драйвер не опенсорсный, а хитрожопый, с регистрацией и с проверкой лицензии (судя по форуму, у некоторых она ещё слетает, и нужно повторно активировать). Интерфейс у этого драйвера через COM-объект.
                  Ответить
        • Гуглёжка показывает, что его и из «Delphi» используют.

          Да и потом он же регистрируется в реестре. В реестре можно зарегистрировать оле-оле-оле-сервер без полного пути к DLL?
          Ответить
          • >В реестре можно зарегистрировать оле-оле-оле-сервер без полного пути к DLL?
            думаю да, если покласть его в system32
            Ответить
        • >> Скорее всего 1С его видит, потому что .dllка лежит в той же папке, что и 1С

          Смотри, он пишет, что у него такой код:
          $Дисплей = new com("AddIn.Line8");


          Читаем тугоментацию:
          https://www.php.net/manual/ru/com.construct.php
          com::__construct ( string $module_name [, mixed $server_name = NULL [, int $codepage = CP_ACP [, string $typelib ]]] )

          module_name
          ProgID, Class ID или Moniker, указывающий на компонент для загрузки. Обычно ProgID - это имя приложения или DLL и имя объекта, разделенные точкой. Например: Word.Application. Class ID - это UUID, уникальный для заданного класса. Moniker - специальная форма именования, похожая по концепции к URL, которая идентифицирует ресурс и способ его загрузки.

          Путь к DLL тут не указывается, он берётся из реестра «Шіпдошз».
          Ответить
          • Далее: https://www.php.net/manual/ru/com.error-handling.php

            Модуль выбрасывает исключения класса com_exception в случае потенциальной фатальной ошибки возвращенной COM. Исключения COM имеют четко определенное свойство code, соответствующее возвращенному из различных операций COM значению HRESULT. На основании этого кода вы можете построить логику обработки данных ошибок.

            Т. е. вызов кокококонструктора нужно обернуть в try...catch. Расшифровка кодов HRESULT описана в пэдээфке, ссылку на которую я дал:
            Код ошибки Описание
            0 Ошибок нет
            -1 Нет связи
            -2 Операция зарезервирована для будущих версий
            -3 Порт недоступен
            -4 Ключ защиты не найден
            -5 Работа драйвера прервана пользователем
            -6 Недопустимое значение
            -7 Невозможно добавить устройство
            -8 Невозможно удалить устройство
            -9 Устройство не найдено
            -10 Неправильная последовательность операций
            -11 Устройство не включено
            -12 Не поддерживается в данной версии оборудования
            -13 Драйвер не смог загрузить необходимые модули
            -14 Порт занят приложением: (\\<имя ПК>\<описание приложения-
            клиента>\<описание драйвера>)
            -15..-198 Зарезервировано
            … …
            -198 Зарезервировано
            -199 Неопознанная ошибка


            Если бы он умел читать документацию, он бы получил кокококод ошибки, и не гадал бы на кокококофейной гуще.
            Ответить
            • Давайте что-то нормальное обсуждать?
              Ответить
                • > девиация

                  Сразу видно, что ты математик из рашки
                  Ответить
              • Интересно. А «1С» он запускал на той же машине? «1С» умеет вручную грузить незарегистрированный в реестре объект? Или «1С» работает через другой драйвер (я уже приводил реальный пример, что к одному и тому же экрану можно получить доступ через драйвер «АТОЛ» и через драйвер «Штрих»)?
                Ответить
                • Если я верно понял страдальца, то да: на той же машине.
                  Почему она видит COM объект, а пых -- нет?
                  Я не знаю.
                  Я бы посоветовал сделать ему regsvr32, но может быть, что 1с 32х битная, а php 64 битный или наоборот?

                  Как ты понимаешь наверное, регистрируются они в разных местах в реестре. 32х битный в
                  HKey_Classes_Root\Wow6432Node\CLSID/APPID\

                  Можно предположить, что нет доступа к dll, но тогда ошибка была бы иной..

                  REGDB_E_CLASSNOTREG звучит как невозможность найти его в реесте

                  Можно взять procmon, и посмотреть куда кто лезет в реестре, и что там не находит.

                  Можно так же проверить доступ к объекту из других аутомейшен окружений (js/vbs @ wsh или powershell).

                  Наконец есть еще пермишены com
                  https://docs.microsoft.com/en-us/windows/win32/com/launchpermission
                  могут быть разные пользователи

                  Опотный виндузятник бы точно разобрался, но таких там нет
                  Ответить
                  • Ага, там есть раздел HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole, в котором хранятся дефолтные пермишны, и у каждого AppID можно выставить свои. Если выставить неправильно, можно всё сломать. Например, перестанет работать «Проводник» или текст перестанет копироваться в буфер. Будет очень страшно.
                    Ответить
                    • заергистрируй себе этот объект кстати, и проверь доступ к нему их 64 и 32

                      если я прав, то мы разгадали загадку
                      Жаль, у нас нет прав постить на форум пыхеров
                      Ответить
                      • А что, если у Сёмы битность «Питона» и «билдтулз» разная?

                        *****

                        Попытаемся собрать испытательный стенд:
                        <?php
                        
                        try {
                            $o = new com('This.Pituh.Does.Not.Exists');
                        } catch(Exception $e) {
                            printf("Code = %x\n", $e->getCode());
                            echo $e->__toString();
                        //    var_export($e);
                        }

                        Выхлоп (в кодировке 1251):
                        Code = 800401e4
                        exception 'com_exception' with message 'Failed to create COM object `This.Pituh.Does.Not.Exists': Синтаксическая ошибка
                        ' in D:\Workdir\LAB\Pitushnya\a.php:4
                        Stack trace:
                        #0 D:\Workdir\LAB\Pitushnya\a.php(4): com->com('This.Pituh.Does...')
                        #1 {main}
                        Ответить
                        • Посмотрим, какие ещё бывают коды:
                          Code = 8007007e
                          exception 'com_exception' with message 'Failed to create COM object `Word.Document.8': Не найден указанный модуль.
                          ' in D:\Workdir\LAB\Pitushnya\b.php:4
                          Stack trace:
                          #0 D:\Workdir\LAB\Pitushnya\b.php(4): com->com('Word.Document.8')
                          #1 {main}


                          *****

                          Code = 80004002
                          exception 'com_exception' with message 'Failed to create COM object `rtffile': Интерфейс не поддерживается
                          ' in D:\Workdir\LAB\Pitushnya\c.php:4
                          Stack trace:
                          #0 D:\Workdir\LAB\Pitushnya\c.php(4): com->com('rtffile')
                          #1 {main}
                          Ответить
                          • 8007007e (Не найден указанный модуль) стабильно вываливается, если переименовать dll/ocx-файл. Копирование файла в текущую директорию или в директорию PHP не решает проблему.
                            Ответить
                          • Ставлю драйвер v.6 (2008-го года), 32-битный на 32-битную систему.
                            Запускаю тест:
                            <?php $o = new com('AddIn.Line45');
                            com_print_typeinfo($o);
                            Выводит такую питушню (в 2к символов не влезает):
                            class ILine1C5X { /* GUID={1D056259-4601-412C-BBB7-90F1A1F6777B} */
                            	/* DISPID=1610612736 */
                            	function QueryInterface(
                            		/* VT_PTR [26] [in] --> ? [29]  */ &$riid,
                            		/* VT_PTR [26] [out] --> VT_PTR [26]  */ &$ppvObj 
                            		)
                            	{
                            	}
                            	/* DISPID=1610612737 */
                            	/* VT_UI4 [19] */
                            	function AddRef(
                            		)
                            	{
                            	}
                            	/* DISPID=1610612738 */
                            	/* VT_UI4 [19] */
                            	function Release(
                            		)
                            	{
                            	}
                            	/* DISPID=1610678272 */
                            	function GetTypeInfoCount(
                            		/* VT_PTR [26] [out] --> VT_UINT [23]  */ &$pctinfo 
                            		)
                            	{
                            	}
                            	/* DISPID=1610678273 */
                            	function GetTypeInfo(
                            		/* VT_UINT [23] [in] */ $itinfo,
                            		/* VT_UI4 [19] [in] */ $lcid,
                            		/* VT_PTR [26] [out] --> VT_PTR [26]  */ &$pptinfo 
                            		)
                            	{
                            	}
                            	/* DISPID=1610678274 */
                            	function GetIDsOfNames(
                            		/* VT_PTR [26] [in] --> ? [29]  */ &$riid,
                            		/* VT_PTR [26] [in] --> VT_PTR [26]  */ &$rgszNames,
                            		/* VT_UINT [23] [in] */ $cNames,
                            		/* VT_UI4 [19] [in] */ $lcid,
                            		/* VT_PTR [26] [out] --> VT_I4 [3]  */ &$rgdispid 
                            		)
                            	{
                            	}
                            	/* DISPID=1610678275 */
                            	function Invoke(
                            		/* VT_I4 [3] [in] */ $dispidMember,
                            		/* VT_PTR [26] [in] --> ? [29]  */ &$riid,
                            		/* VT_UI4 [19] [in] */ $lcid,
                            		/* VT_UI2 [18] [in] */ $wFlags,
                            		/* VT_PTR [26] [in] --> ? [29]  */ &$pdispparams,
                            		/* VT_PTR [26] [out] --> VT_VARIANT [12]  */ &$pvarResult,
                            		/* VT_PTR [26] [out] --> ? [29]  */ &$pexcepinfo,
                            		/* VT_PTR [26] [out] --> VT_UINT [23]  */ &$puArgErr 
                            		)
                            	{
                            	}
                            	/* DISPID=1 */
                            	/* VT_I4 [3] */
                            	var $ResultCode;
                            
                            	/* DISPID=2 */
                            	/* VT_BSTR [8] */
                            	var $ResultDescription;
                            
                            	/* DISPID=3 */
                            	/* VT_BSTR [8] */
                            	var $Version;
                            
                            	/* DISPID=4 */
                            	/* VT_I4 [3] */
                            	var $CurrentDeviceIndex;
                            
                            	/* DISPID=4 */
                            	var $CurrentDeviceIndex;
                            
                            	/* DISPID=5 */
                            	/* VT_I4 [3] */
                            	var $CurrentDeviceNumber;
                            Ответить
                            • При переименовании Line1C.dll получаю ошибку 8007007e, при regsvr32 /u Line1C.dll получаю ошибку 800401e4.

                              Такой код, как у него (80040154), получить пока не удалось.
                              Ответить
                              • так а ты пробовал из 64 битоного пхп это сделать?
                                Ответить
                              • кажется, такая ошибка бывает, когда зарегистрированная dll не имеет нужного интерфейса
                                или ошибка битности, или не та dll

                                или и то, и другое
                                Ответить
                                • Похоже, ты прав. У него «пыхпых» 64-битный, а драйвер 32-битный.

                                  Посмотрел ещё раз тему на «phpclub», он использует именно «AddIn.Line8» (чёрт, сначала написал «Ass» вместо «Add»), значит, у него драйвера восьмой версии. Наверняка они 32-битные. Кажется, 64-битные драйвера появились только в 9-й версии.

                                  У него два взаимоисключающих пути:
                                  1. Поменять «пыхпых» на 32-битную версию.
                                  2. Поменять драйвера на 64-битную версию, поменять «1С» на 64-битную версию, переписать кучу скриптов на «PHP» и «1С» (потому что в 9-й версии всё поменяли).

                                  Есть и третий путь:
                                  https://rakafon.blogspot.com/2009/04/32-bit-dll-64-bit.html
                                  Ответить
                                  • А пых под винду по умолчангию 64?
                                    Просто вот питон -- 32, там еще надо умудрица скачыать 64
                                    Ответить
                                    • У пыха ссылки сразу на две версии. Даже на четыре: у него ещё есть вариант thread-safe и non-thread-safe, проверь:
                                      https://windows.php.net/download

                                      Хотя у него же WAMP, а я не знаю, какой в нём пых. Нужно смотреть.
                                      Ответить
                                      • Приведи реальный пример когда нужен ts, а когда nts.
                                        Ответить
                                        • TS нужен, если ставишь пых модулем «Апача». NTS с «Апачем» просто не будет работать. В остальных случаях на «thread safety» плевать. Вроде считают, что NTS чуть быстрее, потому что не надо ничего синхронизировать, но на самом деле там экономия — копейки по сравнению с тормозами СУБД и с прочей питушнёй.
                                          Ответить
                                          • План глобальной оптимизации PHP-приложения:
                                            1. Заменить все двойные кавычки на одинарные;
                                            2. Скачать и установить «NTS» версию «PHP»;
                                            Ответить
                                    • Остаётся проблема передачи данных, если данные передаются не по значению, а по указателю. В 32-битный код нельзя передать указатель на данные, лежащие по адресу (1 << 32) и выше. Нужно выделять блок памяти, целиком лежащий строго ниже адреса (1 << 32), копировать в него данные, и передавать уже указатель на копию.
                                      Ответить
                                      • Ок. Теперь давайте что-то нормальное обсуждать. Говнокод скатился.
                                        Ответить
                                        • Давайте обсудим «Phalcon» — первый фреймворк для «PHP», написанный не на «PHP», а как нативный модуль.
                                          Ответить
                                          • Т.е. в отличие от нормальных фреймворков, он умеет не только в SQL инъекции, но и в сегфолты?

                                            Ждём php.sys, чтобы мммаксимум уязвимостей.
                                            Ответить
                                            • Так точно!

                                              Ещё вот что интересно: первые версии фреймворка «Phalcon» были написаны на няшной сишке, потом автор его переписал на язык программирования «Зефир»:
                                              https://docs.zephir-lang.com/0.12/en/welcome

                                              Реальный пример кода на «Зефире»:
                                              namespace MyLibrary;
                                              
                                              /**
                                               * Filter
                                               */
                                              class Filter
                                              {
                                                  /**
                                                   * Filters a string, returning its alpha charactersa
                                                   *
                                                   * @param string str
                                                   */
                                                  public function alpha(string str)
                                                  {
                                                      char ch; string filtered = "";
                                              
                                                      for ch in str {
                                                         if (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') {
                                                            let filtered .= ch;
                                                         }
                                                      }
                                              
                                                      return filtered;
                                                  }
                                              }
                                              Ответить
                                              • Эмпирическое правило гласит: "всякий язык с ключевым словом function не нужен, кроме разве что луа"
                                                Ответить
                                              • ‎Ночной зефир
                                                ‎Струит эфир.
                                                ‎Шумит,
                                                ‎Бежит
                                                ‎Гвадалквивир.

                                                Гвадалквивир шумит, а говноёбы продолжаю компилировать говно в сишечку, вместо того, чтобы взять нормальный язык.
                                                Ответить
                                                • Надо было Страуструпу сказать, что нужно было взять нормальный язык, а не разрабатывать «Cfront».
                                                  Ответить
                                                  • Может, и надо было.

                                                    Я мечтаю о языке с бесплатным интеропом с сишкой, и при этом с современным синтаксисом.

                                                    Может, надо стать растоблядью или свифтблядью?
                                                    Ответить
                                                    • Псс, парень. Тебе на D. Сишные либы как родные, плюсы - как родная тетка. ГЦ немного портит вид. Но на замену Питону пойдет.
                                                      Ответить
                                                        • все кругом дрова, операционки, AAA-игры, проги реального времени пишут? если нет, то и с гц жить можно
                                                          Ответить
                                                          • > с гц жить можно

                                                            Да похуй на пирфоманс. С GC неудобно же, вручную закрывать файлы приходится, вручную каскадить это закрытие в сложных объектах и т.п. Нахуй так жить?
                                                            Ответить
                                                            • Абстрактные рассуждения какие-то, помноженные на С++ головного мозга. Помимо GC в некоторых языках есть вариации на тему RAII (в том же питоне).
                                                              Как Java и скриптухи живут? Было бы проблемой, то языки сдохли бы.
                                                              Ответить
                                                              • > вариации на тему RAII

                                                                Ну хоть что-то, хотя это только для scoped объектов работает. Банальная задачка про класс, который держит 2 файла, превращается в кучу бойлерплейта. Даже с ExitStack'ом.

                                                                > было бы проблемой, языки сдохли бы

                                                                Ну PHP ещё жив, поэтому проблем в нём, походу, нет.
                                                                Ответить
                                                                • Да и RAII не панацея. Что если в обертке над файлом метод close кидает исключение (логика такая или апишная функция код ошибки возвращает о невозможности закрыть), то в деструкторе уже звать его опасно
                                                                  Ответить
                                                                  • > метод close кидает исключение

                                                                    А это хуёвый дизайн из прошлого, на самом деле. Сделали гибрид из flush и close, когда буферизации не было, а теперь все страдают. Та же хуйня и с другими подобными API, где close за каким-то хером делает полезные действия помимо собственно закрытия.

                                                                    Позови flush() перед close() и не будет никакого исключения в close. В общем-то на джаве это тоже рекомендуют делать.

                                                                    К слову, в джаве с этим самым close() умудрились обосраться и молча недописать файл если места на диске не хватает. Лучше бы прога пизданулась по terminate, чем такое.
                                                                    Ответить
                                                              • Ты так говоришь, как будто говно дохнет.

                                                                Говно прекарсно живет, и решает проблемы через жопу.

                                                                Тут уже был тредик про проблемы ГЦ. ГЦ это километры бойлерплейта чтобы закрывать ресурсы, это случайная течка памяти, и огромные футпринты и внезапные тормоза от ГЦ.
                                                                Ответить
                                                                • ГЦ решает несуществующую проблему, которая была актуальная четверть века назад.

                                                                  Тоже смое делает скриптушня.

                                                                  В 1991-м году изобрели питуна, потому что скриптовать на сишечке было бы сложно, тяжело и небезопасно.

                                                                  Но в 2020 писать на каком-нить котлине или TypeScript можно так же легко, как и на скриптушне, но в сотню раз удобнее и безопаснее.

                                                                  Скриптушня была нужна в 1991, а в 2020 не нужна.

                                                                  Когда жабу пилили в 1996 (или когда там) не было еще повсеместного рефкаунта. Код изобиловал ручными new и delete, в которых питузы тупые путались, удаляли два раза одно и то же, или текли память.

                                                                  Для питузов сделали ГЦ, и тогда это имело смысл.

                                                                  А в 2020 уже есть смарт поинтеры, есть ARC у ябла, и смысла в ГЦ нет.

                                                                  Пора бы уже это признать.

                                                                  Нету смысла в оверлеях: их заменили виртуальной памятью.
                                                                  Нету смысла в скриптушне: нужны языки со стат типизацией.
                                                                  Нету смысла в ГЦ: нужны языки с нормальным управлением памятью и детерминированным временем жизни объекта
                                                                  Ответить
                                                                  • >Нету смысла в ГЦ: нужны языки с нормальным управлением памятью

                                                                    Ну и потом дрочить weak-ref и питушиться с фрагментированной кучей.
                                                                    Нахуй надо?
                                                                    ГЦшня победила, пора уже признать.

                                                                    >есть ARC у ябла, и смысла в ГЦ нет
                                                                    И циклические зависимости он собирает?
                                                                    Ответить
                                                                    • При ARC компилятор просто сам вставляет retain/release в нужные места.

                                                                      За разрешением циклических зависимостей нужно следить самому при помощи weak/unowned.
                                                                      Ответить
                                                                • > Говно прекарсно живет, и решает проблемы через жопу.

                                                                  В жемчужины философской мысли!
                                                                  Ответить
                                                          • для любителей ГЦ есть 100500 языков уже. Вопрос был в том, что взять, если я хочу управлять размером памяти

                                                            Кажется что лучший ответ пока от десктопа -- свифт
                                                            Ответить
                                                          • Все кругом принцы датские что-ли?
                                                            Если нет, то можно и говно кушать.

                                                            Да кстати и шоколадка не панацея: ей тоже можно травануться
                                                            Ответить
                                            • >> он умеет не только в SQL инъекции, но и в сегфолты?

                                              Я забыл, что «Phalcon» уже не единственный фреймворк с сегфолтами. Ещё есть «YAF», его даже в документацию по «PHP» добавили:
                                              https://www.php.net/manual/ru/book.yaf.php

                                              Maintainer: Xinchen Hui.
                                              Ответить
                                              • Посмотрел «YAF». Он написан на чистой сишке, а не на каком-то говне. Даже тесты приложены.
                                                Ответить
                                                • Ты снял ОЗК и принял душ? Или до сих пор сидишь на своём говне?
                                                  Ответить
                              • 80040154
                                REGDB_E_CLASSNOTREG же, ты разве наизуст не знаешь??
                                Ответить
                      • Ставлю драйвер 10-й версии — а у него интерфейса AddIn.Line45 нет. У него новый интерфейс AddIn.Fptr10.
                        Ответить
                      • Я теперь догадываюсь, в чём проблема: у этой питушни у каждой версии свои названия объектов. Вероятно, у него документация от одной версии, а на машине, на которой он тестирует, установлена другая версия драйверов.
                        Ответить
  • «Многие из вас при подключении торгового оборудования к 1С:Предприятие 7.7 Торговля и Склад, в частности, дисплеев покупателей, сталкивались с различными проблемами. Например, драйвер дисплея покупателя от АТОЛ прост в настройке и подключении (достаточно прописать в настройках торгового оборудования внешнюю компоненту Line1C.dll и указать программный идентификатор AddIn.Line45), однако в бесплатной версии, драйвер работает в демонстрационном режиме и в каждую четвертую позицию выводимого на дисплей покупателя текста вставляет символ *. Альтернативным вариантом драйверам от АТОЛ, являются драйвера дисплея покупателя Штрих, которые можно скачать на официальном сайте в разделе поддержки (рекомендуется устанавливать версию 2.1).

    Однако штатной обработки для подключения дисплея покупателя с драйвером Штрих, ни в комплекте поставки ТиС 9.2, ни в комплекте поставки драйверов дисплея покупателя от Штрих попросту нет. В результате получается патовая ситуация. Драйвера от АТОЛ в бесплатном режиме не предоставляют необходимый функционал, драйвера Штрих бесплатны и, казалось бы, отлично работают, но их невозможно подключить к 1С.»


    Отсюда: http://dml.compkaluga.ru/forum/index.php?showtopic=68584

    Какой багор )))
    Ответить
    • Вы преобрели:
      Пиво Балтика 9: 80 рублей
      Сухарики "кириешки с майонезом":30 рублей
      Сигареты "Прима мягкая с фильтром":120 рублей
      *: 942005 рублей 21 копейка

      Сумма списана с вашей карты, и возврату не подлежит
      Ответить
    • Кокококая интересная функция у драйвера:

      OpenDrawer ()
      ОткрытьЯщик ()
      Открывает денежный ящик.
      Название Тип Дост. Значения
      Выходные свойства
      DrawerOpened
      ЯщикОткрыт
      Log RW Состояние денежного
      ящика:
      FALSE / TRUE
      Описание свойств
      DrawerOpened
      ЯщикОткрыт [ВЫХ]
      Если DrawerOpened = TRUE, то денежный ящик открыт.
      Если DrawerOpened = FALSE, то денежный ящик закрыт.
      Ящик не откроется, если он заперт на ключ.
      Поддерживаемое оборудование
      Метод поддерживается только моделями с подключаемым денежным
      ящиком.
      Ответить
        • Поскольку в любом скрипте на «PHP» по законам жанра должны быть уязвимости, ящик будет самопроизвольно открываться в неподходящее время.
          Ответить
        • Давай думать, какую информацию нужно вывести на экран кассира, чтобы он отвлёкся и не заметил, как из ящика тырят деньги.
          Ответить
            • Как думаешь, кассир будет рассказывать следователю, что проебал наличку из-за того, что кассовый аппарат показал порнуху?
              Ответить
              • Вряд ли, на кассах обычно тётки-тётошные сидят, такие сразу побегут жаловаться, что злые хакиры сломали кассовый аппарат и срамоту показывают на нём.
                Ответить
                • думаешь, рази они тетки, то им и на багрового хуйца посмотреть не охота?
                  Ответить
  • https://phpclub.ru/talk/threads/Проблема-с-кодом-на-сайте.86817/
    Помогите пожалуйста, появилась вот такая ошибка на сайте, при загрузки корточки товара.
    Код ошибки:
    
    [ParseError]
    syntax error, unexpected '">"' (T_CONSTANT_ENCAPSED_STRING) (0)
    
    Часть кода где эта ошибка появляется
    
    <a href="<?=($viewImgType==" :="">" data-bx-app-ex-href="" class="" data-bx-app-ex-class="" title="" data-bx-app-ex-title="">>
    <img src="null" id="<span id=" title="Код PHP: <? echo $arItemIDs["ALL_ITEM_IDS"]['PICT']; ?>" class="bxhtmled-surrogate">
    <span class=" data-bx-app-ex-href="><span class="bxhtmled-right-side-item-icon"></span><span class="bxhtmled-comp-lable" unselectable="on"
     spellcheck="false">Код PHP</span></span>" src="" data-bx-app-ex-src="<?=$arFirstPhoto['SMALL']['src']; ?>" <?=($viewImgType=="MAGNIFIER"
     ? 'data-large="" xpreview="" xoriginal=""': "");?> alt="" data-bx-app-ex-alt="<span id="bxid516534823" title="Код PHP: <?=$alt;?>"
     class="bxhtmled-surrogate"><?=$alt;?><span class="bxhtmled-surrogate-inner"><span class="bxhtmled-right-side-item-icon"></span><span
     class="bxhtmled-comp-lable" unselectable="on" spellcheck="false">Код PHP</span></span>" title="<span id="bxid467447014" title="Код PHP:
     <?=$title;?>" class="bxhtmled-surrogate"><?=$title;?><span class="bxhtmled-surrogate-inner"><span
     class="bxhtmled-right-side-item-icon"></span><span class="bxhtmled-comp-lable" unselectable="on" spellcheck="false">Код PHP</span></span>"
     itemprop="image">
    <div class="zoom"></div>
    </a>

    Еба-а-а-ать! В аду для программистов их явно заставляют чинить и править именно такой код.
    Ответить
      • Мы просто любим обмазываться несвежим PHP и смеяться.
        Ответить
        • Мне почему-то не смешно. Школьник, ничего не понимающий в “PHP”, пытается что-то починить.
          Ответить
        • Кстати, сам «phpclub» сейчас на движке «Xenforo» — движок форума с функциями соцсети поверх фреймворка «Zend Framework». Коммерческий, но за пару минут можно нагуглить нулённый архив.

          Ловите реальный пример кода:
          <?php
          
          // generates an rgba png based on colors in inputs, part of XenForo
          
          $r = getFromInput('r');
          $g = getFromInput('g');
          $b = getFromInput('b');
          $a = getFromInput('a', 255);
          
          header('Content-type: image/png');
          header('Expires: Wed, 01 Jan 2020 00:00:00 GMT');
          header('Cache-Control: public');
          
          echo "\x89PNG\r\n\x1A\n" // signature
          	. "\x00\x00\x00\x0DIHDR\00\x00\x00\x0A\x00\x00\x00\x0A\x08\x03\x00\x00\x00\xBA\xEC\x3F\x8F" // header
          	. getPngChunk('PLTE', pack('CCCCCC', $r, $g, $b, $r, $g, $b))
          	. getPngChunk('tRNS', pack('CC', $a, $a))
          	. "\x00\x00\x00\x0EIDAT\x08\xD7\x63\x60\x84\x03\x06\xDA\x33\x01\x15\xEA\x00\x65\x39\xA1\xDA\x84" // data
          	. "\x00\x00\x00\x00IEND\xAE\x42\x60\x82"; // end
          
          function getFromInput($key, $default = 0)
          {
          	if (!isset($_REQUEST[$key]))
          	{
          		return $default;
          	}
          
          	return min(255, max(0, intval($_REQUEST[$key])));
          }
          
          function getPngChunk($chunkName, $data)
          {
          	return pack('N', strlen($data)) . $chunkName . $data . pack('N', crc32($chunkName . $data));
          }
          Ответить
          • Это был реальный пример кода без ООП. А вот реальный пример кода с ООП:
            <?php
            
            $startTime = microtime(true);
            $fileDir = dirname(__FILE__);
            
            require($fileDir . '/library/XenForo/Autoloader.php');
            XenForo_Autoloader::getInstance()->setupAutoloader($fileDir . '/library');
            
            XenForo_Application::initialize($fileDir . '/library', $fileDir);
            XenForo_Application::set('page_start_time', $startTime);
            
            $fc = new XenForo_FrontController(new XenForo_Dependencies_Public());
            $fc->run();

            Как всё сложно... Именно поэтому «Конардо» против «ООП».
            Ответить
    • > href="<?=($viewImgType==" :="">"
      > <img src="null" id="<span id="
      > class=" data-bx-app-ex-href="
      > куча бессмысленных span

      Вореции какие-то. Напоминает как выхлоп бредогенератора, когда к нему на вход код попадал.
      Ответить
      • А управленных span id="bxid467447014" title="on"
        spellcheck="false">Код PHP</span></span>" src="null" id="<?=$arFirstPhoto['SMALL']['src']; ?>" <?=($viewImgType==" :="">" data-bx-app-ex-title="" data-large="" xpreview="" xoriginal="">"
        > <img src="" data-bx-app-ex-href="<?=($viewImgType==" :="">"
        > <img src="null" id="<span><span>" src="null" id="<span class="bxhtmled-surrogate-inner"> <img src="null" id="<span class="bxhtmled-right-side-item-icon"></span>"
        itemprop="image">>
        <img src="null" id="bxid467447014" title;?>" class="bxhtmled-surrogate-item-icon"></span><span class="bxhtmled-right-side-item-icon"></span><span
        class="bxhtmled-right-side-item-icon" spellcheck="false">Код PHP</span></span>"
        itemprop="image"><?=$title;?><span class="bxhtmled-surrogate">
        <span class="bxhtmled-right-side-item-icon"></span>" title="Код PHP</span class=" data-large="" xpreview="" title="" data-bx-app-ex-hreads/Проблема-сайте.86817/
        Ответить
    • Я всё-таки надеюсь, что оригинальный код испорчен движком форума «phpclub.ru», потому что ОП его не обернул в тег [ code ].
      Ответить
      • Посмотрел в соседних тредах, там код вне тега [code] не испорчен.
        Ответить
    • Могу еще часть кода прислать, может понятнее станет
      Ответить
      • Последняя надежда пропала...

        Погуглил «bxhtmled» — CSS-классы с таким префиксом генерирует «Битрикс». Это выхлоп «Битрикса», пропущенный через какой-то извращатель «HTML».
        Ответить
      • Ещё немножко погуглил. У «Битрикса» есть WYSIWYG-редактор под названием «CHTMLEditor». Очень похоже, что чувак выдрал HTML-код из страницы, сгенерированной «Битриксом», потом попытался его отредактировать в этом «CHTMLEditor», а «CHTMLEditor» всё распидорасил.
        Ответить
          • Представляешь, как визивиг реагирует на пыхокод, в котором куча незакрытых тегов и вот эти вот <? повсюду?
            Ответить
  • Предварительное резюме:
    • Объект «AddIn.Line8» присутствует только в драйверах v.8.
    • Объект «AddIn.Line45» присутствует с самых древних версий по v.8 (включительно).
    • Начиная с v.9 (первый выпуск — 2013-й год) старые объекты не поддерживаются. Какой багор )))

    Короче, если у питуза не говно мамонта, то придётся принять за щеку изучить новую документацию и переписать код сопряжения с нуля. В новых версиях драйвера библиотеки Line1C.dll больше нет. Выгрызка из документации по 10-й версии драйвера:
    «Для подключения драйвера как COM-объект необходимо зарегистрировать в системе библиотеку addin_fptr10_x86.dll (addin_fptr10_x64.dll в случае 64-битного приложения) с помощью команды regsvr32.exe. Библиотека может сама обнаружить установленный через инсталлятор драйвер. Также инсталлятор автоматически регистрирует компонент заданной архитектуры в процессе установки. В проекте необходимо создать объект типа ActiveX (или OLE) класса AddIn.Fptr10. В данной документации описаны примеры работы с драйвером в виде OLE-объекта на языке Delphi.»
    Ответить
      • Сначала зомбирующий поет:
        "Малость говнокода тензорный питух читает.
        Малость объект «AddIn.Line8» присутствует с самых древних версий по v.8 (включительно).
        Малость объект «AddIn.Line45» присутствует с самых древних версий по v.8 (включительно).
        Малость начиная с v.9 (первый выпуск — 2013-й год) старые объекты не поддерживаются.
        Малость какой багор )))"

        Затем:
        "Много говнокода тензорный питух читает.
        Много объект «AddIn.Line8» присутствует с самых древних версий по v.8 (включительно).
        Много объект «AddIn.Line45» присутствует с самых древних версий по v.8 (включительно).
        Много начиная с v.9 (первый выпуск — 2013-й год) старые объекты не поддерживаются.
        Много какой багор )))"

        ( Поют несколько раз. Ассистенты зомбирующего повторяют посе каждого раза "Зачем? Зачем?" )
        Ответить
      • Очевидно, чтобы стать экспертом в программиовании кассовых аппаратов из 1С посредством Ole Automation интерфейса AddIn.Line45.

        Может и не самое востребованое знание, но никогда ведь не знаешь, что в жизни пригодится
        Ответить
        • Да он и так уже любую проблему за пару дней разбирает... Куда ему ещё качаться то?
          Ответить
          • Может, он без этого уже не может?

            Кто-то не может не курить, а Икарус не может не решать проблем.
            Ответить
        • Смотрите, что нашёл. В шестой версии (2006-го года) были драйвера для DOS:
          procedure CallDRVI(Command: byte; ParamString: String; Section: byte);
          var
            SegStr, OfsStr: word;
            i: integer;
            Vector: pointer;
            IntVec: byte;
            Code: integer;
          begin
            ResultCode := 0;
            IntVec := $60;
            GetIntVec(IntVec, Vector);
            if (Vector = nil) then
              begin
              Application.Done;
              Writeln('Ошибка при попытке использования драйвера DRVI.EXE');
              halt;
              end;
            { запись параметров команды и вызов прерывания }
            SegStr := Seg(ParamString);
            OfsStr := Ofs(ParamString)+1;
            asm
              mov ax,SegStr
              mov es,ax
              mov bx,OfsStr
              mov ah, Command
              int 60h
              mov ResultCode, al
              mov ax,es
              mov SegStr,ax
              mov OfsStr,bx
            end;
            { чтение строки }
            i := 1; ResultStr := '';
            While (i<255)and(Mem[SegStr:OfsStr] <> $0d) do
            begin
              ResultStr := ResultStr + Char(Mem[SegStr:OfsStr]);
              Inc(i); Inc(OfsStr);
            end;
          end;
          Ответить
              • понял

                а в паскале рази нельзя было дернуть прерывание не из асемблера?
                Ответить
                • Да вроде была какая-то функция, которая принимала структуру с регистрами и номер прерывания. Но с асма пошустрее должно быть. Хотя здесь скорость не принципиальна, конечно.
                  Ответить
                  • в няшной точно была

                    помню, как я дергал прерывания без единой строчки на асме
                    заполнял структуру с регистрами, и вызывал функцию
                    Ответить
                • Можно было. Но этот код писали цари, которые не хотели тратить такты на копирование данных через промежуточные переменные.
                  Ответить
        • А в десятой версии есть модуль на «Питоне»:
              def __init__(self, lib_path):
                  assert sys.version_info >= (2, 6)
                  self.lib_path = lib_path
                  if platform.system() == 'Windows':
                      if not self.lib_path.endswith('fptr10.dll'):
                          self.lib_path = os.path.join(self.lib_path, 'fptr10.dll')
                      try:
                          ctypes.CDLL(os.path.join(os.path.dirname(self.lib_path), 'msvcp140.dll'), mode=ctypes.RTLD_LOCAL)
                          self.library = ctypes.CDLL(self.lib_path, mode=ctypes.RTLD_LOCAL)
                      except OSError:
                          self.lib_path = os.path.join(
                              QueryValueEx(
                                  OpenKey(
                                      HKEY_LOCAL_MACHINE,
                                      "Software\\ATOL\\Drivers\\10.0\\KKT"),
                                  "INSTALL_DIR")[0],
                              'bin\\fptr10.dll')
                          ctypes.CDLL(os.path.join(os.path.dirname(self.lib_path), 'msvcp140.dll'), mode=ctypes.RTLD_LOCAL)
                          self.library = ctypes.CDLL(self.lib_path, mode=ctypes.RTLD_LOCAL)
                  elif platform.system() == 'Darwin':
                      if not self.lib_path.endswith('fptr10.framework/fptr10'):
                          self.lib_path = os.path.join(self.lib_path, 'fptr10.framework/fptr10')
                      try:
                          self.library = ctypes.CDLL(self.lib_path, mode=ctypes.RTLD_LOCAL)
                      except OSError:
                          self.lib_path = lib_path
                          if not self.lib_path.endswith('libfptr10.dylib'):
                              self.lib_path = os.path.join(self.lib_path, 'libfptr10.dylib')
                          self.library = ctypes.CDLL(self.lib_path, mode=ctypes.RTLD_LOCAL)
                  else:
                      if not self.lib_path.endswith('libfptr10.so'):
                          self.lib_path = os.path.join(self.lib_path, 'libfptr10.so')
                      self.library = ctypes.CDLL(self.lib_path, mode=ctypes.RTLD_LOCAL)
          Ответить
            • «Мак» поддерживается только 64-битный, «Линукс» — и 32, и 64, причём и «Интел», и «ARM».

              Там ещё есть интерфейс для «Андроида», для «iOS», и для «Йажи». Хотя я не представляю себе кассовый аппарат на «iOS» и сколько пердолинга понадобится для установки (его же без джейлбрейка не поставишь).
              Ответить
              • > кассовый аппарат

                Дык эти фискальные регистраторы часто к обычным компам подключают. Я даже сам прикручивал к одной проге.

                Видимо кто-то и из айпада терминал умудрился сделать 🙂
                Ответить
              • > я не представляю себе кассовый аппарат на «iOS»
                - та ладно, просто погугли "кассовый аппарат iOS", куча вариантов разной степени хардварности.

                Я вроде даже видел портативный принтер чеков, который надевался на телефон.
                Ответить
  • Блять. Я думал такие персонажи бывают только во второсортных анекдотах.
    Ответить
  • Здравствуйте! Я новичек в пхп.
    есть такой код на индексной странице:
    <a href="magazine.php?id='.$object2->getObjectId().'">

    хочу передать данные на страницу magazine.php.
    принять через $id = $_GET["id"]; не получается, т.к Php 7. 4.
    Как можно передать и получить данные?
    Заранее спасибо!

    https://phpclub.ru/talk/threads/%D0%9F%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D0%B0-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85.86794/
    Ответить
  • Я поместил класс в файл, который повсеместно подключен в проекте, допустим functions.php и добавил туда функцию вызова:


    <?php
    class Async
    {
        public function __construct() {}   
        public function request($uri = '', $data = [])
        {       
            $formDataScript = '';
            if (!empty($data)) {
                $method = 'POST';
                $formDataScript = <<<HEREDOC
    var formData = new FormData(); \r\n
    HEREDOC;
                foreach ($data as $key => $value) {
                    $formDataScript .= <<<HEREDOC
    formData.append("$key", "$value"); \r\n
    HEREDOC;
                }
            } else {
                $method = 'GET';
                $formDataScript = <<<HEREDOC
    var formData = null;
    HEREDOC;
            }
            $asyncRequestHtml = <<<HEREDOC
    <script>
      function responseListener() {
         console.log(this.responseText);
     }
    
     var oReq = new XMLHttpRequest();
     
     oReq.addEventListener("load", responseListener);
     oReq.open("$method", "$uri", true);
     $formDataScript
     oReq.send(formData);
    </script>\r\n\r\n
    HEREDOC;
    
            echo $asyncRequestHtml;
            //var_dump($_POST);
            //var_dump($_GET);
        }
    }
    
    function аякс($uri, $data)
    {     
        $req = (new Async())->request($uri, $data);
        echo $req;
    }
    ?>



    вот это шаблони3атор!
    https://phpclub.ru/talk/threads/php-%D0%BE%D0%B1%D1%91%D1%80%D1%82%D0%BA%D0%B0-%D0%B4%D0%BB%D1%8F-ajax.86674/
    Ответить
    • "...чел генерит JS из PHP, тут его ждет волшебное царство отладки."
      Ответить

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

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8