Особенности работы с DOMDocument в php 7 и 8

Разрабатывал давече один скрипт по работе с XML, на рабочем ПК, установленным php 8.2, и был весьма удивлён, что код вида:

Отлично работает на PHP 8 и не работает на PHP 7. , ругаясь на

Странно подумал я, почесав затылок. Пришлось переписать код на вида:

И нигде ведь не попадалось в документации по работе с PHP, что совместимость с php7 сломана. Хотя может плохо смотрел..

И снова ГИС ЖКХ.

После победы с формированием XML, осталось только обернуть всё в SOAP запрос. Самым простым в моём случае оказалось воспользоваться классом nusoap, Всё свелось примерно к такому коду:

Ткнулся сначала разбираться со штатным SoapClient, но там как оказалось, необходимо переписать весь код заново, для формирования XML. Да и мудрёно слишком.

PHP: Перевести из HEX В DEC

Оказывается перевести большое число из HEX в DEC, посредством PHP весьма затруднительно. Есть команда base_convert, но документация честно предупреждает, что если число большое — перевод будет «не точным» (ну на самом деле лучше бы вообще ошибку выдавали перевода, чем «не точную»). Поэтому пришлось использовать костыль с вызовом утилиты Linux:

Сброс пароля Bitrix

Для того чтобы сбросить пароль у известного пользователя и известным ID, достаточно в корне сайта разместить файл:

r.php

Вместо 111 — вставить ID пользователя из БД. Вместо 123 — свой пароль. Далее открыть этот файл через браузер. После смены пароля естественно файл нужно удалить

ГИС ЖКХ — отправка и подпись запросов часть 3

В продолжение предыдущей статьи. На основе того кода, так и не удалось довести до рабочего состояния. Ошибка так и осталась. Посему было решено..опять всё переписать с нуля.. С учётом полученных новых вводных, а именно:

  • XML подписи оказывается должен быть минимизирован (не должно быть форматирования тегов)
  • подписываться должен хэш данных, а не сами данные
  • при работе с XML как текстом, были опасения про неверную каннизацию

Потому переписал код на отностительно честную работу с XML через DOMDocument. С одним нюансом — так и не научился вставлять один XML документ в другой посредством его. Поэтому присутствует трюк с переводом XML в текст, склейкой двух XML и обратный перевод в DOMDocument. XML шаблоны удалось сократить до двух:

fish.xml:

xades_dom.xml:

И сам код скрипта:

Но увы и ах.. Результат его работы хоть с виду еще более нормальный, но ГИС ЖКХ так и продолжает возвращать ошибку:

Update 24.07.2025:

Всё получилось. Собака порылась в не верном преобразовании серийного номера в десятичный вид. Итоговый вид функции (правильный):

1 2 3 28