Перейти к содержимому
Поиск
Php Разработка

PHP: полный мануал с примерами, функциями и ООП

Практический мануал PHP: от переменных и читаемого кода до безопасных форм, интеграций, базы данных и ООП на примере магазина. Учебный маршрут, поиск функций, подробные примеры, разбор ошибок и исходники для скачивания.

Александр НекрасовИзменено:
Практический мануал PHP: от переменных и функций к объектной модели интернет-магазина
PHP 8.5.11468 глав6256 карточек справочника
Дерево руководства

Глава 439 · От первой операции до полного справочника

RpmInfo: пакеты RPM, версии, база пакетов и диагностика

Прочитать метаданные RPM без установки, сравнить версии, раскрыть макросы и проверить установленный пакет.

RpmInfo: читать RPM без установки

Расширение получает сведения из отдельного RPM-файла и из базы уже установленных пакетов. Начиная с rpminfo 1.0.0 при librpm 4.13+ также доступен потоковый wrapper для чтения содержимого RPM.

Официальная страница: RpmInfo.

Дерево всех функций RpmInfo

Справочник разделяет чтение файла, поиск в базе, сравнение EVR, работу с макросами и символическими ссылками внутри пакета.

ОперацияОфициальное назначение
rpmaddtagAdd tag retrieved in query
rpmdbinfoGet information from installed RPM
rpmdbsearchSearch RPM packages
rpmdefineDefine or change a RPM macro value
rpmexpandRetrieve expanded value of a RPM macro
rpmexpandnumericRetrieve numerical value of a RPM macro
rpmgetsymlinkGet target of a symlink
rpminfoGet information from a RPM file
rpmvercmpRPM version comparison

Официальная страница: RpmInfo Functions.

Полный набор тегов и констант RpmInfo

Большой официальный список отражает теги заголовка RPM: имя, EVR, архитектуру, зависимости, файлы, подписи, changelog и служебные значения. Не все теги присутствуют в каждом пакете, поэтому чтение строят через проверку ключа, а не через безусловный индекс массива.

КонстантаКак читать в коде
RPMVERSIONSystem librpm version.
RPMSENSE_ANYИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMSENSE_LESSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMSENSE_GREATERИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMSENSE_EQUALИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMSENSE_POSTTRANSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMSENSE_PREREQИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMSENSE_PRETRANSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMSENSE_INTERPИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMSENSE_SCRIPT_PREИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMSENSE_SCRIPT_POSTИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMSENSE_SCRIPT_PREUNИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMSENSE_SCRIPT_POSTUNИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMSENSE_SCRIPT_VERIFYИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMSENSE_FIND_REQUIRESИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMSENSE_FIND_PROVIDESИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMSENSE_TRIGGERINИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMSENSE_TRIGGERUNИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMSENSE_TRIGGERPOSTUNИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMSENSE_MISSINGOKИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMSENSE_RPMLIBИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMSENSE_TRIGGERPREINИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMSENSE_KEYRINGИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMSENSE_CONFIGИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMMIRE_DEFAULTSearch pattern is a regular expression with \. , .* , and ^...$ added.
RPMMIRE_STRCMPSearch pattern is a string , using strcmp(3) .
RPMMIRE_REGEXSearch pattern is a regular expression, using regcomp(3) .
RPMMIRE_GLOBSearch pattern is a glob expression, using fnmatch(3) .
RPMTAG_ARCHИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_ARCHSUFFIXRequires librpm = 4.18
RPMTAG_ARCHIVESIZEИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_BASENAMESName (not path) of files, with database index.
RPMTAG_BUGURLИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_BUILDARCHSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_BUILDHOSTИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_BUILDTIMEИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_CИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_CHANGELOGNAMEИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_CHANGELOGTEXTИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_CHANGELOGTIMEИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_CLASSDICTИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_CONFLICTFLAGSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_CONFLICTNAMEConflicting dependencies, with database index.
RPMTAG_CONFLICTNEVRSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_CONFLICTSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_CONFLICTVERSIONИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_COOKIEИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_DBINSTANCEИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_DEPENDSDICTИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_DESCRIPTIONИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_DIRINDEXESИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_DIRNAMESDirectory of files, with database index.
RPMTAG_DISTRIBUTIONИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_DISTTAGИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_DISTURLИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_DSAHEADERИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_EИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_ENCODINGИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_ENHANCEFLAGSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_ENHANCENAMEWeak dependencies, with database index, requires librpm = 4.13.
RPMTAG_ENHANCENEVRSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_ENHANCESИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_ENHANCEVERSIONИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_EPOCHИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_EPOCHNUMИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_EVRИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_EXCLUDEARCHИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_EXCLUDEOSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_EXCLUSIVEARCHИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_EXCLUSIVEOSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILECAPSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILECLASSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILECOLORSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILECONTEXTSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILEDEPENDSNИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILEDEPENDSXИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILEDEVICESИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILEDIGESTALGOИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILEDIGESTSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILEFLAGSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILEGROUPNAMEИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILEINODESИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILELANGSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILELINKTOSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILEMD5SИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILEMODESИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILEMTIMESИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILENAMESИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILENLINKSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILEPROVIDEИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILERDEVSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILEREQUIREИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILESIGNATURELENGTHИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILESIGNATURESИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILESIZESИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILESTATESИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILETRIGGERCONDSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILETRIGGERFLAGSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILETRIGGERINDEXИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILETRIGGERNAMEFile trigger name, with database index, requires librpm = 4.13.
RPMTAG_FILETRIGGERPRIORITIESИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILETRIGGERSCRIPTFLAGSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILETRIGGERSCRIPTPROGИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILETRIGGERSCRIPTSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILETRIGGERTYPEИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILETRIGGERVERSIONИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILEUSERNAMEИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FILEVERIFYFLAGSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_FSCONTEXTSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_GIFИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_GROUPGroup of the package, with database index.
RPMTAG_HDRIDDeprecated, use RPMTAG_SHA1HEADER instead. Removed in librpm 6.
RPMTAG_HEADERCOLORИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_HEADERI18NTABLEИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_HEADERIMAGEИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_HEADERIMMUTABLEИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_HEADERREGIONSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_HEADERSIGNATURESИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_ICONИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_INSTALLCOLORИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_INSTALLTIDInstallation transaction ID, with database index.
RPMTAG_INSTALLTIMEИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_INSTFILENAMESPath of files, with database index.
RPMTAG_INSTPREFIXESИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_LICENSEИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_LONGARCHIVESIZEИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_LONGFILESIZESИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_LONGSIGSIZEИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_LONGSIZEИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_MODULARITYLABELИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_NИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_NAMEPackage name, with database index.
RPMTAG_NEVRИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_NEVRAИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_NOPATCHИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_NOSOURCEИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_NVRИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_NVRAИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_OИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_OBSOLETEFLAGSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_OBSOLETENAMEObsoleted packages, with database index.
RPMTAG_OBSOLETENEVRSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_OBSOLETESИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_OBSOLETEVERSIONИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_OLDENHANCESИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_OLDENHANCESFLAGSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_OLDENHANCESNAMEИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_OLDENHANCESVERSIONИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_OLDFILENAMESИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_OLDSUGGESTSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_OLDSUGGESTSFLAGSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_OLDSUGGESTSNAMEИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_OLDSUGGESTSVERSIONИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_OPTFLAGSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_ORDERFLAGSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_ORDERNAMEИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_ORDERVERSIONИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_ORIGBASENAMESИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_ORIGDIRINDEXESИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_ORIGDIRNAMESИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_ORIGFILENAMESИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_OSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_PИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_PACKAGERИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_PATCHИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_PATCHESFLAGSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_PATCHESNAMEИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_PATCHESVERSIONИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_PAYLOADCOMPRESSORИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_PAYLOADDIGESTИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_PAYLOADDIGESTALTWith librpm = 4.16.
RPMTAG_PAYLOADDIGESTALGOИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_PAYLOADFLAGSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_PAYLOADFORMATИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_PKGIDDeprecated, use RPMTAG_SIGMD5 instead. Removed in librpm 6.
RPMTAG_PLATFORMИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_POLICIESИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_POLICYFLAGSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_POLICYNAMESИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_POLICYTYPESИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_POLICYTYPESINDEXESИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_POSTINИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_POSTINFLAGSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_POSTINPROGИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_POSTTRANSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_POSTTRANSFLAGSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_POSTTRANSPROGИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_POSTUNИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_POSTUNFLAGSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_POSTUNPROGИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_POSTUNTRANSRequires librpm = 4.19
RPMTAG_POSTUNTRANSFLAGSRequires librpm = 4.19
RPMTAG_POSTUNTRANSPROGRequires librpm = 4.19
RPMTAG_PREFIXESИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_PREINИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_PREINFLAGSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_PREINPROGИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_PRETRANSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_PRETRANSFLAGSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_PRETRANSPROGИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_PREUNИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_PREUNFLAGSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_PREUNPROGИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_PREUNTRANSRequires librpm = 4.19
RPMTAG_PREUNTRANSFLAGSRequires librpm = 4.19
RPMTAG_PREUNTRANSPROGRequires librpm = 4.19
RPMTAG_PROVIDEFLAGSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_PROVIDENAMEProvided dependencies, with database index.
RPMTAG_PROVIDENEVRSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_PROVIDESИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_PROVIDEVERSIONИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_PUBKEYSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_RИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_RECOMMENDFLAGSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_RECOMMENDNAMERecommended weak dependencies, with database index, requires librpm = 4.13.
RPMTAG_RECOMMENDNEVRSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_RECOMMENDSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_RECOMMENDVERSIONИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_RECONTEXTSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_RELEASEИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_REMOVETIDИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_REQUIREFLAGSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_REQUIRENAMERequired dependencies, with database index.
RPMTAG_REQUIRENEVRSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_REQUIRESИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_REQUIREVERSIONИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_RPMVERSIONИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_RSAHEADERИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_SHA1HEADERSHA1 signature, with database index.
RPMTAG_SHA256HEADERИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_SIGGPGИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_SIGMD5MD5 signature, with database index.
RPMTAG_SIGPGPИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_SIGSIZEИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_SIZEИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_SOURCEИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_SOURCEPACKAGEИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_SOURCEPKGIDИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_SOURCERPMИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_SPECRequires librpm = 4.18
RPMTAG_SUGGESTFLAGSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_SUGGESTNAMESuggested weak dependencies, with database index, requires librpm = 4.13.
RPMTAG_SUGGESTNEVRSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_SUGGESTSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_SUGGESTVERSIONИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_SUMMARYИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_SUPPLEMENTFLAGSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_SUPPLEMENTNAMEWeak dependencies, with database index, requires librpm = 4.13.
RPMTAG_SUPPLEMENTNEVRSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_SUPPLEMENTSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_SUPPLEMENTVERSIONИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_SYSUSERSRequires librpm = 4.19
RPMTAG_TRANSFILETRIGGERCONDSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_TRANSFILETRIGGERFLAGSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_TRANSFILETRIGGERINDEXИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_TRANSFILETRIGGERNAMETransaction file trigger name, with database index, requires librpm = 4.13.
RPMTAG_TRANSFILETRIGGERPRIORITIESИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_TRANSFILETRIGGERSCRIPTFLAGSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_TRANSFILETRIGGERSCRIPTPROGИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_TRANSFILETRIGGERSCRIPTSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_TRANSFILETRIGGERTYPEИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_TRANSFILETRIGGERVERSIONИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_TRANSLATIONURLRequires librpm = 4.18
RPMTAG_TRIGGERCONDSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_TRIGGERFLAGSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_TRIGGERINDEXИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_TRIGGERNAMETrigger name, with database index.
RPMTAG_TRIGGERSCRIPTFLAGSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_TRIGGERSCRIPTPROGИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_TRIGGERSCRIPTSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_TRIGGERTYPEИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_TRIGGERVERSIONИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_UPSTREAMRELEASESRequires librpm = 4.18
RPMTAG_URLИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_VИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_VCSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_VENDORИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_VERBOSEИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_VERIFYSCRIPTИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_VERIFYSCRIPTFLAGSИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_VERIFYSCRIPTPROGИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_VERITYSIGNATUREALGOWith librpm = 4.17.
RPMTAG_VERITYSIGNATURESWith librpm = 4.17.
RPMTAG_VERSIONИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.
RPMTAG_XPMИменованный режим расширения; точный смысл зависит от функции, которая принимает эту константу.

В зафиксированном официальном источнике найдено констант: 285; у 40 из них есть отдельное официальное описание или ограничение версии, и оно сохранено в таблице дословно. Для прикладного отчёта выбирают небольшой разрешённый набор тегов и отдельно сохраняют неизвестные поля для диагностики.

Официальная страница: Predefined Constants.

Установка rpminfo через PECL

Официальный способ — PECL-пакет rpminfo. Сборщику нужны заголовки и библиотека rpm, а процессу PHP — доступ к динамической библиотеке и, для запросов к базе, к базе RPM. После включения проверяют extension_loaded('rpminfo').

Официальная страница: Installation via PECL.

Требование: librpm 4.11.3 или новее

Официальный минимум — librpm 4.11.3. Возможности stream wrapper зависят от более новой библиотеки: для заявленного поведения требуется librpm 4.13+ и rpminfo 1.0.0+.

Официальная страница: Requirements.

Подготовка RpmInfo: файл, база и версия

ЗадачаПредварительная проверка
Локальный RPMФайл существует, читается, имеет ожидаемый хеш и допустимый размер
База пакетовКод выполняется на RPM-системе и имеет доступ к её rpmdb
Сравнение версийПередаются EVR-строки; обычное лексикографическое сравнение не используется
МакросыЗначение рассматривается как RPM-макрос, а не как команда оболочки

Официальная страница: Installing/Configuring.

RPM-файл, база установленных пакетов и EVR — три разные задачи

ЗадачаИнструмент
Прочитать локальный файл до установкиrpminfo()
Найти уже установленный пакетrpmdbinfo() или rpmdbsearch()
Сравнить epoch:version-releaserpmvercmp()
Раскрыть системный RPM-макросrpmexpand() / rpmexpandnumeric()

Практика: решить, нужен ли апдейт

Сравнить RPM-версии перед обновлениемПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('rpminfo')) {
    throw new RuntimeException('Нужно расширение rpminfo и librpm');
}

echo rpmvercmp('1.0-4', '1.0-5'), PHP_EOL;
echo rpmvercmp('2:1.0-1', '1:9.9-9'), PHP_EOL;
var_dump(rpmvercmp('1.0-5', '1.0-5', 'eq'));

Epoch имеет больший приоритет, чем version и release. Поэтому сравнивать EVR через оператор >, version_compare() или сортировку строк нельзя. Точные значения этого примера основаны на договоре rpmvercmp; runtime расширения в текущем Windows-окружении не заявлен.
Что должно получиться в совместимом окружении: -1
1
bool(true)

Проблема из практикиКак она закрыта в руководстве
Расширение или librpm отсутствует, а метаданные пакета пытаются угадать по переименованному файлу.Пример требует реальный RPM fixture, читает теги из заголовка и не выдаёт имя файла за подтверждённые метаданные.
RPM-версии сравнивают как десятичные числа или обычные строки и получают неверный порядок.Сценарий использует rpmvercmp() и отдельно объясняет роль epoch, version и release.

Практика: проверить локальный пакет и обработать отказ

Проверить RPM-файл до развёртыванияПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('rpminfo')) {
    throw new RuntimeException('Нужно расширение rpminfo и librpm');
}

$path = __DIR__ . '/packages/service.rpm';
if (!is_file($path)) {
    throw new RuntimeException('RPM-файл не найден');
}

$error = '';
$info = rpminfo($path, false, $error);
if (!is_array($info)) {
    throw new RuntimeException($error !== '' ? $error : 'RPM не прочитан');
}

$required = ['Name', 'Version', 'Release', 'Arch'];
foreach ($required as $key) {
    if (!array_key_exists($key, $info)) {
        throw new RuntimeException("В RPM нет ожидаемого поля {$key}");
    }
}

printf(
    "package=%s evr=%s-%s arch=%s\n",
    $info['Name'],
    $info['Version'],
    $info['Release'],
    $info['Arch']
);

Это контекстный пример для реального RPM fixture: значения заранее не выдумываются и берутся только из заголовка пакета. Для runtime-доказательства нужен сохранённый RPM с известным хешем; до его появления заявлен только lint.
Что должно получиться в совместимом окружении: package= evr=- arch=

Перед развёртыванием к этим полям добавляют проверку архитектуры, ожидаемого имени, разрешённого репозитория и криптографической подписи подходящим системным инструментом. rpminfo() читает метаданные, но сам факт успешного чтения не делает пакет доверенным.

Как превратить отдельные вызовы в рабочий сервис

Спрячьте нативное расширение за одним прикладным классом: на вход он получает проверенную модель, внутри вызывает операции этой главы, а наружу возвращает путь или байты готового документа. Так HTTP-контроллер не знает о ресурсах, временных файлах и константах расширения.

Следующий шаг: добавить временный каталог на один запрос, журнал ошибок без секретных данных, лимит размера/времени и независимую проверку результата другим инструментом.

Функции и методы этой темы

Откройте карточку, чтобы увидеть договор функции, примеры, ограничения и связанные инструменты.

rpmaddtagДобавить дополнительный RPM-тег в результат подробного чтения пакета.

PECL rpminfo >= 0.5.0 · rpminfo; librpm

rpmaddtag(int $tag): bool

Добавить дополнительный RPM-тег в результат подробного чтения пакета.

Официальная сигнатура. rpmaddtag(int $tag): bool.

Доступность. Точная строка официального versions.xml: PECL rpminfo >= 0.5.0.

ПараметрЧто приходит и зачем
int $tagЧисловой RPMTAG_*, который нужно добавить в подробный результат.
Точная формулировка PHP Manual

One of RPMTAG_ * constant.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

Где увидеть в целой задаче. проверку реального RPM-файла до развёртывания. Что знать до примера: переменные, вызов функций и возврат, массивы, исключения и обработка отказа, файлы и каталоги.

Базовый вызов: rpmaddtagПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('rpminfo')) {
    throw new RuntimeException('Нужно расширение rpminfo');
}

$result = rpmaddtag(RPMTAG_SHA256HEADER);
var_dump($result);

rpmaddtag: показан минимальный договор и реальный тип результата. Выполнение требует Linux/RPM-окружение с rpminfo; локально заявлен только lint.
Что должно получиться в совместимом окружении: bool(true) при успешной операции.

Практическая проверка: rpmaddtagПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('rpminfo')) {
    throw new RuntimeException('Нужно расширение rpminfo');
}

$result = rpmaddtag(RPMTAG_LONGFILESIZES);
var_dump($result);

rpmaddtag: второй пример использует данные развёртывания и обрабатывает отсутствие результата. Выполнение требует Linux/RPM-окружение с rpminfo; локально заявлен только lint.
Что должно получиться в совместимом окружении: bool(true) при успешной операции.

Отказ и граница проверки. успех подтверждает только строгое true. Проверьте поддержку тега установленной версией librpm и наличие ключа в возвращённом массиве.

Полный официальный текст карточки на английском

Purpose: Add tag retrieved in query

Description Add an additional retrieved tag in subsequent queries.

Return: Return Values Returns true on success.

Связанные операции: rpminfo, rpmdbinfo, rpmdbsearch.

rpmdbinfoПолучить сведения об установленном RPM-пакете по имени и версии.

PECL rpminfo >= 0.2.0 · rpminfo; librpm

rpmdbinfo(string $nevr, bool $full = false): array|null

Получить сведения об установленном RPM-пакете по имени и версии.

Официальная сигнатура. rpmdbinfo(string $nevr, bool $full = false): array|null.

Доступность. Точная строка официального versions.xml: PECL rpminfo >= 0.2.0.

ПараметрЧто приходит и зачем
string $nevrИмя/epoch/version/release установленного RPM-пакета в форме, которую принимает rpmdb.
Точная формулировка PHP Manual

Name with optional epoch, version and release.

bool $full = falsetrue запрашивает расширенный набор RPM-тегов, false — сокращённый.
Точная формулировка PHP Manual

If true all information headers for the file are retrieved, else only a minimal set.

Возврат. Тип array|null. Официальный текст: Return Values An array of array of information, or null on error.

Где увидеть в целой задаче. проверку реального RPM-файла до развёртывания. Что знать до примера: переменные, вызов функций и возврат, массивы, исключения и обработка отказа, файлы и каталоги.

Базовый вызов: rpmdbinfoПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('rpminfo')) {
    throw new RuntimeException('Нужно расширение rpminfo');
}

$result = rpmdbinfo('php-cli', false);
if ($result === null) { throw new RuntimeException('Запись в rpmdb не найдена'); }
echo 'records=', count($result), PHP_EOL;

rpmdbinfo: показан минимальный договор и реальный тип результата. Выполнение требует Linux/RPM-окружение с rpminfo; локально заявлен только lint.
Что должно получиться в совместимом окружении: records=<количество найденных записей>

Решение задачи развёртывания: rpmdbinfoПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('rpminfo')) {
    throw new RuntimeException('Нужно расширение rpminfo');
}

rpmaddtag(RPMTAG_INSTALLTIME);
$result = rpmdbinfo('php-cli', true);
if (!is_array($result) || $result === []) { throw new RuntimeException('php-cli не найден в rpmdb'); }
usort($result, static fn(array $a, array $b): int => ((int) ($b['Installtime'] ?? 0)) <=> ((int) ($a['Installtime'] ?? 0)));
$active = $result[0];
foreach (['Name', 'Version', 'Release', 'Arch'] as $key) { if (!isset($active[$key])) { throw new RuntimeException("В rpmdb нет {$key}"); } }
printf("installed=%s-%s-%s.%s candidates=%d\n", $active['Name'], $active['Version'], $active['Release'], $active['Arch'], count($result));

rpmdbinfo: Из rpmdb выбирается фактически установленная запись, проверяются ключевые теги и явно учитывается возможность нескольких кандидатов. Выполнение требует Linux/RPM-окружение с rpminfo; локально заявлен только lint.
Что должно получиться в совместимом окружении: installed=<Name-Version-Release.Arch> candidates=<число записей>

Отказ и граница проверки. null нужно отличать от пустого результата. Нужны RPM-система, доступная rpmdb и ожидаемый search tag; отсутствие записи не равно повреждению базы.

Полный официальный текст карточки на английском

Purpose: Get information from installed RPM

Description Retrieve information about an installed package, from the system RPM database.

Return: Return Values An array of array of information, or null on error.

Связанные операции: rpmaddtag.

rpmdbsearchНайти установленные RPM-пакеты по имени, файлу или другому тегу.

PECL rpminfo >= 0.3.0 · rpminfo; librpm

rpmdbsearch(string $pattern, int $rpmtag = RPMTAG_NAME, int $rpmmire = -1, bool $full = false): array|null

Найти установленные RPM-пакеты по имени, файлу или другому тегу.

Официальная сигнатура. rpmdbsearch(string $pattern, int $rpmtag = RPMTAG_NAME, int $rpmmire = -1, bool $full = false): array|null.

Доступность. Точная строка официального versions.xml: PECL rpminfo >= 0.3.0.

ПараметрЧто приходит и зачем
string $patternШаблон поиска по базе RPM, а не регулярное выражение PHP.
Точная формулировка PHP Manual

Value to search for.

int $rpmtag = RPMTAG_NAMERPMTAG_*, по которому выполняется поиск (имя, файл или другой тег).
Точная формулировка PHP Manual

Search criterion, which is one of the RPMTAG_ * constants.

int $rpmmire = -1Режим сопоставления RPMMIRE_* для поиска по rpmdb.
Точная формулировка PHP Manual

Pattern type, which is one of the RPMMIRE_ * constants. When [lt] 0 the criterion must equal the value, and database index is used if possible.

bool $full = falsetrue запрашивает расширенный набор RPM-тегов, false — сокращённый.
Точная формулировка PHP Manual

If true all information headers for the file are retrieved, else only a minimal set.

Возврат. Тип array|null. Официальный текст: Return Values An array of array of information, or null on error.

Где увидеть в целой задаче. проверку реального RPM-файла до развёртывания. Что знать до примера: переменные, вызов функций и возврат, массивы, исключения и обработка отказа, файлы и каталоги.

Базовый вызов: rpmdbsearchПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('rpminfo')) {
    throw new RuntimeException('Нужно расширение rpminfo');
}

$result = rpmdbsearch('php*');
if ($result === null) { throw new RuntimeException('Запись в rpmdb не найдена'); }
echo 'records=', count($result), PHP_EOL;

rpmdbsearch: показан минимальный договор и реальный тип результата. Выполнение требует Linux/RPM-окружение с rpminfo; локально заявлен только lint.
Что должно получиться в совместимом окружении: records=<количество найденных записей>

Практическая проверка: rpmdbsearchПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('rpminfo')) {
    throw new RuntimeException('Нужно расширение rpminfo');
}

$result = rpmdbsearch('/usr/bin/php', RPMTAG_BASENAMES);
if ($result === null) { throw new RuntimeException('Запись в rpmdb не найдена'); }
echo 'records=', count($result), PHP_EOL;

rpmdbsearch: второй пример использует данные развёртывания и обрабатывает отсутствие результата. Выполнение требует Linux/RPM-окружение с rpminfo; локально заявлен только lint.
Что должно получиться в совместимом окружении: records=<количество найденных записей>

Отказ и граница проверки. null нужно отличать от пустого результата. Нужны RPM-система, доступная rpmdb и ожидаемый search tag; отсутствие записи не равно повреждению базы.

Полный официальный текст карточки на английском

Purpose: Search RPM packages

Description Search packages in the system RPM database.

Return: Return Values An array of array of information, or null on error.

Связанные операции: rpmaddtag.

rpmdefineОпределить RPM-макрос для последующего раскрытия путей и выражений.

PECL rpminfo >= 1.2.0 · rpminfo; librpm

rpmdefine(string $text): bool

Определить RPM-макрос для последующего раскрытия путей и выражений.

Официальная сигнатура. rpmdefine(string $text): bool.

Доступность. Точная строка официального versions.xml: PECL rpminfo >= 1.2.0.

ПараметрЧто приходит и зачем
string $textТекст, который попадёт в документ или будет измерен.
Точная формулировка PHP Manual

Macro name, options, body.

Возврат. Тип bool. Официальный текст: Return Values Returns true on success.

Где увидеть в целой задаче. сравнение EVR и работу с RPM-макросами. Что знать до примера: переменные, вызов функций и возврат, массивы, исключения и обработка отказа, файлы и каталоги.

Базовый вызов: rpmdefineПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('rpminfo')) {
    throw new RuntimeException('Нужно расширение rpminfo');
}

$result = rpmdefine('_aen_root /srv/aen');
var_dump($result);

rpmdefine: показан минимальный договор и реальный тип результата. Выполнение требует Linux/RPM-окружение с rpminfo; локально заявлен только lint.
Что должно получиться в совместимом окружении: bool(true) при успешной операции.

Практическая проверка: rpmdefineПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('rpminfo')) {
    throw new RuntimeException('Нужно расширение rpminfo');
}

$result = rpmdefine('_aen_release 42');
var_dump($result);
$expanded = rpmexpand('%{_aen_release}');
if ($expanded !== '42') { throw new RuntimeException('RPM-макрос не раскрылся'); }
echo 'expanded=', $expanded, PHP_EOL;

rpmdefine: второй пример использует данные развёртывания и обрабатывает отсутствие результата. Выполнение требует Linux/RPM-окружение с rpminfo; локально заявлен только lint.
Что должно получиться в совместимом окружении: bool(true) при успешной операции. После определения макрос раскрывается в 42.

Отказ и граница проверки. успех подтверждает только строгое true. Проверьте синтаксис и область действия макроса; раскрытая строка не является командой оболочки и не должна исполняться автоматически.

Полный официальный текст карточки на английском

Purpose: Define or change a RPM macro value

Description Define or change a RPM macro value. This can be used to select the database path and backend to use instead of system default one.

Return: Return Values Returns true on success.

Связанные операции: rpmexpand, rpmdbinfo.

rpmexpandРаскрыть строку с RPM-макросами в итоговый текст.

PECL rpminfo >= 1.2.0 · rpminfo; librpm

rpmexpand(string $text): string

Раскрыть строку с RPM-макросами в итоговый текст.

Официальная сигнатура. rpmexpand(string $text): string.

Доступность. Точная строка официального versions.xml: PECL rpminfo >= 1.2.0.

ПараметрЧто приходит и зачем
string $textТекст, который попадёт в документ или будет измерен.
Точная формулировка PHP Manual

Text with RPM macros to expand.

Возврат. Тип string. Официальный текст: Return Values A string with concatenated macro expansions.

Где увидеть в целой задаче. сравнение EVR и работу с RPM-макросами. Что знать до примера: переменные, вызов функций и возврат, массивы, исключения и обработка отказа, файлы и каталоги.

Базовый вызов: rpmexpandПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('rpminfo')) {
    throw new RuntimeException('Нужно расширение rpminfo');
}

$result = rpmexpand('%{_bindir}');
if ($result === null) { throw new RuntimeException('Значение не получено'); }
echo $result, PHP_EOL;

rpmexpand: показан минимальный договор и реальный тип результата. Выполнение требует Linux/RPM-окружение с rpminfo; локально заявлен только lint.
Что должно получиться в совместимом окружении: Строка раскрытого макроса или цель символической ссылки; пустая строка для rpmgetsymlink означает «не ссылка».

Практическая проверка: rpmexpandПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('rpminfo')) {
    throw new RuntimeException('Нужно расширение rpminfo');
}

rpmdefine('_aen_root /srv/aen');
rpmdefine('_aen_release 42');
$result = rpmexpand('%{_aen_root}/releases/%{_aen_release}');
if ($result === null) { throw new RuntimeException('Значение не получено'); }
echo $result, PHP_EOL;

rpmexpand: второй пример использует данные развёртывания и обрабатывает отсутствие результата. Выполнение требует Linux/RPM-окружение с rpminfo; локально заявлен только lint.
Что должно получиться в совместимом окружении: Строка раскрытого макроса или цель символической ссылки; пустая строка для rpmgetsymlink означает «не ссылка».

Отказ и граница проверки. сначала проверяется заявленный тип результата. Проверьте синтаксис и область действия макроса; раскрытая строка не является командой оболочки и не должна исполняться автоматически.

Полный официальный текст карточки на английском

Purpose: Retrieve expanded value of a RPM macro

Description Retrieve expanded value of a RPM macro.

Return: Return Values A string with concatenated macro expansions.

Связанные операции: rpmexpandnumeric.

rpmexpandnumericРаскрыть RPM-выражение и получить целое число.

PECL rpminfo >= 1.2.0 · rpminfo; librpm

rpmexpandnumeric(string $text): int

Раскрыть RPM-выражение и получить целое число.

Официальная сигнатура. rpmexpandnumeric(string $text): int.

Доступность. Точная строка официального versions.xml: PECL rpminfo >= 1.2.0.

ПараметрЧто приходит и зачем
string $textТекст, который попадёт в документ или будет измерен.
Точная формулировка PHP Manual

Text with RPM macros to expand.

Возврат. Тип int. Официальный текст: Return Values Macro expansion as a int . Boolean values ( Y or y returns 1, N or n returns 0 ) are permitted as well. An undefined macro returns 0 .

Где увидеть в целой задаче. сравнение EVR и работу с RPM-макросами. Что знать до примера: переменные, вызов функций и возврат, массивы, исключения и обработка отказа, файлы и каталоги.

Базовый вызов: rpmexpandnumericПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('rpminfo')) {
    throw new RuntimeException('Нужно расширение rpminfo');
}

$result = rpmexpandnumeric('1');
var_dump($result);

rpmexpandnumeric: показан минимальный договор и реальный тип результата. Выполнение требует Linux/RPM-окружение с rpminfo; локально заявлен только lint.
Что должно получиться в совместимом окружении: Для сравнения без operator: -1, 0 или 1; с operator: bool. Для numeric expansion: int.

Практическая проверка: rpmexpandnumericПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('rpminfo')) {
    throw new RuntimeException('Нужно расширение rpminfo');
}

rpmdefine('_aen_release 42');
$result = rpmexpandnumeric('%{?_aen_release}');
var_dump($result);

rpmexpandnumeric: второй пример использует данные развёртывания и обрабатывает отсутствие результата. Выполнение требует Linux/RPM-окружение с rpminfo; локально заявлен только lint.
Что должно получиться в совместимом окружении: Для сравнения без operator: -1, 0 или 1; с operator: bool. Для numeric expansion: int.

Отказ и граница проверки. сначала проверяется заявленный тип результата. Проверьте синтаксис и область действия макроса; раскрытая строка не является командой оболочки и не должна исполняться автоматически.

Полный официальный текст карточки на английском

Purpose: Retrieve numerical value of a RPM macro

Description Retrieve numerical value of a RPM macro.

Return: Return Values Macro expansion as a int . Boolean values ( Y or y returns 1, N or n returns 0 ) are permitted as well. An undefined macro returns 0 .

Связанные операции: rpmexpand.

rpminfoПрочитать метаданные RPM-файла без его установки в систему.

PECL rpminfo >= 0.1.0 · rpminfo; librpm

rpminfo(string $path, bool $full = false, string &$error = ?): array|null

Прочитать метаданные RPM-файла без его установки в систему.

Официальная сигнатура. rpminfo(string $path, bool $full = false, string &$error = ?): array|null.

Доступность. Точная строка официального versions.xml: PECL rpminfo >= 0.1.0.

ПараметрЧто приходит и зачем
string $pathПуть к локальному файлу; проверяйте существование и не позволяйте выход из разрешённого каталога.
Точная формулировка PHP Manual

Path of the RPM file.

bool $full = falsetrue запрашивает расширенный набор RPM-тегов, false — сокращённый.
Точная формулировка PHP Manual

If true all information headers for the file are retrieved, else only a minimal set.

string &$error = значение по умолчаниюПеременная по ссылке: расширение запишет сюда текст ошибки чтения RPM.
Точная формулировка PHP Manual

If provided, will receive the possible error message, and will avoid a runtime warning.

Возврат. Тип array|null. Официальный текст: Return Values An array of information, or null on error.

Где увидеть в целой задаче. проверку реального RPM-файла до развёртывания. Что знать до примера: переменные, вызов функций и возврат, массивы, исключения и обработка отказа, файлы и каталоги.

Базовый вызов: rpminfoПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('rpminfo')) {
    throw new RuntimeException('Нужно расширение rpminfo');
}

$rpmFixture = __DIR__ . '/fixtures/service.rpm';
if (!is_file($rpmFixture)) { throw new RuntimeException('Нужен RPM fixture с известным хешем'); }
$error = '';
$result = rpminfo($rpmFixture, false, $error);
if ($result === null) { throw new RuntimeException($error !== '' ? $error : 'RPM не прочитан'); }
echo 'records=', count($result), PHP_EOL;

rpminfo: показан минимальный договор и реальный тип результата. Выполнение требует Linux/RPM-окружение с rpminfo; локально заявлен только lint.
Что должно получиться в совместимом окружении: records=<количество найденных записей>

Решение задачи развёртывания: rpminfoПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('rpminfo')) {
    throw new RuntimeException('Нужно расширение rpminfo');
}

$rpmFixture = __DIR__ . '/fixtures/service.rpm';
if (!is_file($rpmFixture)) { throw new RuntimeException('Нужен RPM fixture с известным хешем'); }
$error = '';
$result = rpminfo($rpmFixture, true, $error);
if (!is_array($result)) { throw new RuntimeException($error !== '' ? $error : 'RPM не прочитан'); }
$required = ['Name', 'Version', 'Release', 'Arch'];
foreach ($required as $key) { if (!array_key_exists($key, $result)) { throw new RuntimeException("В RPM нет {$key}"); } }
$identity = sprintf('%s-%s-%s.%s', $result['Name'], $result['Version'], $result['Release'], $result['Arch']);
echo 'package=', $identity, PHP_EOL;
echo 'fixture-sha256=', hash_file('sha256', $rpmFixture), PHP_EOL;

rpminfo: Полный заголовок локального RPM проверяется на обязательные поля и связывается с хешем конкретного fixture — имя файла не принимается за доказательство содержимого. Выполнение требует Linux/RPM-окружение с rpminfo; локально заявлен только lint.
Что должно получиться в совместимом окружении: package=<Name-Version-Release.Arch> fixture-sha256=<64 hex-символа>

Отказ и граница проверки. null нужно отличать от пустого результата. Проверьте реальный RPM fixture, его хеш и читаемость; имя файла не доказывает теги и наличие указанной ссылки внутри пакета.

Полный официальный текст карточки на английском

Purpose: Get information from a RPM file

Description Retrieve information about a local file, a RPM package.

Return: Return Values An array of information, or null on error.

Связанные операции: rpmaddtag.

rpmvercmpСравнить две версии RPM с учётом epoch, version и release.

PECL rpminfo >= 0.1.0 · rpminfo; librpm

rpmvercmp(string $evr1, string $evr2, string|null $operator = null): int|bool

Сравнить две версии RPM с учётом epoch, version и release.

Официальная сигнатура. rpmvercmp(string $evr1, string $evr2, string|null $operator = null): int|bool.

Доступность. Точная строка официального versions.xml: PECL rpminfo >= 0.1.0.

ПараметрЧто приходит и зачем
string $evr1Первая RPM-версия в форме epoch:version-release.
Точная формулировка PHP Manual

First epoch:version-release string.

string $evr2Вторая RPM-версия для сравнения по правилам RPM.
Точная формулировка PHP Manual

Second epoch:version-release string.

string|null $operator = nullНеобязательное отношение lt/le/eq/ne/ge/gt; при нём rpmvercmp возвращает bool.
Точная формулировка PHP Manual

An optional operator. The possible operators are: [lt] lt [lt]= le [gt] gt [gt]= ge == = eq != [lt][gt] ne . This parameter is case-sensitive, values should be lowercase.

Возврат. Тип int|bool. Официальный текст: Return Values Returns -1 if evr1 is less than evr2 , 1 if evr1 is greater than evr2 , and 0 if they are equal. When using the optional operator argument, the function will return true if the relationship is the one specified by the operator, false otherwise.

Где увидеть в целой задаче. сравнение EVR и работу с RPM-макросами. Что знать до примера: переменные, вызов функций и возврат, массивы, исключения и обработка отказа, файлы и каталоги.

Базовый вызов: rpmvercmpПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('rpminfo')) {
    throw new RuntimeException('Нужно расширение rpminfo');
}

$result = rpmvercmp('1.0-4', '1.0-5');
var_dump($result);

rpmvercmp: показан минимальный договор и реальный тип результата. Выполнение требует Linux/RPM-окружение с rpminfo; локально заявлен только lint.
Что должно получиться в совместимом окружении: Для сравнения без operator: -1, 0 или 1; с operator: bool. Для numeric expansion: int.

Решение задачи развёртывания: rpmvercmpПример для указанного окружения
<?php
declare(strict_types=1);

if (!extension_loaded('rpminfo')) {
    throw new RuntimeException('Нужно расширение rpminfo');
}

$installed = '1:2.4.1-3';
$candidate = '1:2.5.0-1';
$upgradeNeeded = rpmvercmp($installed, $candidate, 'lt');
if (!is_bool($upgradeNeeded)) { throw new RuntimeException('Ожидался bool для оператора lt'); }
$ordering = rpmvercmp($installed, $candidate);
if ($ordering !== -1 || $upgradeNeeded !== true) { throw new RuntimeException('EVR сравнивается неожиданно'); }
echo $upgradeNeeded ? 'decision=upgrade' : 'decision=keep', PHP_EOL;
echo 'ordering=', $ordering, PHP_EOL;

rpmvercmp: Сервис обновления принимает реальное решение по EVR: оператор lt даёт bool, а второй вызов подтверждает порядок значением -1. Выполнение требует Linux/RPM-окружение с rpminfo; локально заявлен только lint.
Что должно получиться в совместимом окружении: decision=upgrade ordering=-1

Отказ и граница проверки. сначала проверяется заявленный тип результата. Передавайте две EVR-строки и поддерживаемый оператор; не заменяйте RPM-семантику version_compare() или сравнением строк.

ВерсияИзменение API
PECL rpminfo 0.7.0Добавлен необязательный параметр $operator. До этой версии функция возвращала только -1, 0 или 1.
Полный официальный текст карточки на английском

Purpose: RPM version comparison

Description Compare two RPM package versions.

Return: Return Values Returns -1 if evr1 is less than evr2 , 1 if evr1 is greater than evr2 , and 0 if they are equal. When using the optional operator argument, the function will return true if the relationship is the one specified by the operator, false otherwise.

Источники и обсуждения

Код и руководство с собой

Скачайте самостоятельные примеры с исходными данными, инструкциями и ожидаемыми результатами. Примеры HTTP и фрагменты для проекта помечены отдельно: им нужно указанное окружение.

Код не исполняется на сайте. Скачайте нужный пример и запускайте его в своём локальном окружении.

Материалы сверены 2026-10-12. Примеры и объяснения написаны для этого руководства; источники и обсуждения доступны в каждой главе.