Phpcredits: примеры (PHP)
phpcredits(int $flags = CREDITS_ALL): boolФункция phpcredits() выводит информацию о разработчиках, модулях и других лицах, внесших вклад в создание PHP. Она преимущественно используется для отображения так называемых "кредитов" или титров проекта на специальных информационных страницах, например, в разделах "О системе" веб-приложений или административных панелей.
Функция принимает до двух аргументов:
- $flag (int) - Определяет, какие именно кредиты будут выведены. Можно комбинировать с помощью побитового ИЛИ (
|). Предопределенные константы:CREDITS_ALL- Все кредиты. Эквивалентно:CREDITS_DOCS + CREDITS_GENERAL + CREDITS_GROUP + CREDITS_MODULES + CREDITS_FULLPAGE + CREDITS_QA + CREDITS_SAPI. Значение по умолчанию, если флаг не указан.CREDITS_DOCS- Список авторов документации.CREDITS_GENERAL- Основные разработчики, координаторы и разработчики дизайна.CREDITS_GROUP- Группа разработчиков ядра.CREDITS_MODULES- Список разработчиков модулей (расширений) и их авторов.CREDITS_FULLPAGE- Обычно используется в комбинации с другими флагами. Указывает, что вывод должен быть оформлен как полная HTML-страница.CREDITS_QA- Список участников обеспечения качества.CREDITS_SAPI- Список разработчиков серверных API (SAPI) модулей.
- $return_string (bool) - Если установлен в
true, функция вернет строку с кредитами вместо вывода на экран. По умолчаниюfalse.
Вывод всех кредитов в виде HTML на экран (стандартное поведение):
phpcredits();[Выводится полная HTML-страница со списками разработчиков, групп, модулей и документации]
Получение кредитов в виде строки для последующей обработки:
$allCredits = phpcredits(CREDITS_ALL, true);
echo substr($allCredits, 0, 200) . '...'; // Выводим только начало<table border="0" cellpadding="3" width="600"> <tr class="h"><td><a href="https://www.php.net/"><img ...
Вывод только списка разработчиков ядра и модулей без оформления полной страницы:
phpcredits(CREDITS_GROUP | CREDITS_MODULES);<h1 class="p">PHP Group</h1> <table border="0" cellpadding="3" width="600">... <h1 class="p">PHP Modules</h1> <table border="0" cellpadding="3" width="600">...
Вывод кредитов для обеспечения качества и документации как полной HTML-страницы:
phpcredits(CREDITS_QA | CREDITS_DOCS | CREDITS_FULLPAGE);[Выводится HTML-страница, начинающаяся с <!DOCTYPE html>, содержащая только кредиты QA и авторов документации]
Прямых аналогов phpcredits() в PHP нет, так как ее задача специфична. Однако для получения общей информации о среде выполнения PHP используются:
phpversion()- Возвращает строку с номером текущей версии PHP. Используется для проверки версии, а не для отображения списка участников.phpinfo()- Выводит обширную таблицу с конфигурацией PHP, загруженными модулями, переменными среды. Содержит раздел с кредитами, но он менее детализирован, чем выводphpcredits(CREDITS_MODULES). Функцияphpinfo()предпочтительнее для полной диагностики окружения.get_loaded_extensions()- Возвращает массив имен загруженных модулей. Полезен для проверки доступности расширений, но не предоставляет информации об их авторах.
Выбор функции зависит от задачи: phpcredits() предназначена исключительно для отображения титров, в то время как phpinfo() является основным инструментом отладки конфигурации.
Концепция вывода списка разработчиков ядра языка или фреймворка присутствует и в других экосистемах, но реализуется по-разному.
Phpcredits в Python
Python не имеет встроенной функции для кредитов. Информация о контрибьюторах находится в документации или может быть получена через sys.version.
import sys
print(sys.version)3.9.7 (default, Sep 16 2021, 13:09:58) [GCC 7.5.0]
В Node.js существует модуль process, который предоставляет информацию о среде, но не список авторов.
console.log(process.version);
console.log(process.release);v18.12.0
{
name: 'node',
sourceUrl: 'https://nodejs.org/download/release/v18.12.0/node-v18.12.0.tar.gz',
headersUrl: 'https://nodejs.org/download/release/v18.12.0/node-v18.12.0-headers.tar.gz'
}Функция phpcredits() уникальна своей ориентацией на публичное признание заслуг разработчиков. В других языках подобная информация, как правило, отделена от среды выполнения и распространяется в виде файлов (CREDITS, AUTHORS) или находится на официальном сайте.
Попытка передать числовое значение вместо предопределенных констант может привести к неожиданному или пустому выводу.
// Ошибка: передано произвольное число
phpcredits(12345);[Вывод может быть пустым или некорректным]
Если установлен второй параметр true, функция ничего не выводит на экран. Ожидание немедленного вывода приведет к "пустой" странице.
// Ошибка: вывод не появится, результат хранится в переменной
phpcredits(CREDITS_ALL, true);
echo "Кредиты выше этой строки"; // Эта строка будет выведена, а кредиты - нетКредиты выше этой строки
Вывод детальной информации о системе, включая имена разработчиков модулей, может раскрыть используемую версию PHP и помочь в атаке. Рекомендуется отключать или ограничивать вызов таких функций на публичных серверах.
Функция phpcredits() является стабильной и давно присутствует в PHP. Существенных изменений в ее поведении или синтаксисе в последних мажорных версиях PHP (7.x, 8.x) не было.
- Константа
CREDITS_SAPIбыла добавлена в PHP 5.3.0. - Поведение и набор выводимой информации обновляются с каждым релизом PHP, так как меняется список контрибьюторов и модулей.
- Сама функция была введена еще в PHP 4.3.0.
В PHP 8 функция ведет себя идентично своим предшественникам в PHP 7, что обеспечивает обратную совместимость.
Кредиты можно сохранить в файл для последующего использования в админ-панели.
// Получаем кредиты для модулей и группы в виде строки
$creditsForPage = phpcredits(CREDITS_MODULES | CREDITS_GROUP, true);
// Встраиваем в шаблон
$htmlPage = '<!DOCTYPE html><html><head><title>О нашей системе</title></head><body>';
$htmlPage .= '<h1>Используемые компоненты PHP</h1>';
$htmlPage .= $creditsForPage;
$htmlPage .= '</body></html>';
// Сохраняем или выводим
file_put_contents('about.html', $htmlPage);
echo 'Страница сгенерирована.';Можно извлечь имена модулей из HTML-вывода для простого логирования (хотя для этой задачи лучше подходит get_loaded_extensions()).
ob_start();
phpcredits(CREDITS_MODULES);
$output = ob_get_clean();
// Простейший поиск заголовков модулей (пример, не надежный для production)
preg_match_all('/<tr><td class="e">(.*?)<\/td>/', $output, $matches);
if (!empty($matches[1])) {
echo "Обнаружены модули: " . implode(', ', $matches[1]);
}Обнаружены модули: Core, ctype, date, dom, hash, fileinfo, filter, ...
Теоретический пример для поиска в кредитах.
$allCredits = phpcredits(CREDITS_ALL, true);
$searchName = "Rasmus";
if (stripos($allCredits, $searchName) !== false) {
echo "Сооснователь PHP найден в списке контрибьюторов.";
} else {
echo "Не найден.";
}Сооснователь PHP найден в списке контрибьюторов.
Создание комплексной информационной страницы.
echo '<h2>Конфигурация</h2>';
ob_start();
phpinfo(INFO_MODULES);
echo '<h2>Разработчики модулей</h2>';
phpcredits(CREDITS_MODULES);
$combinedInfo = ob_get_clean();
echo $combinedInfo;[Выводится сначала информация о модулях от phpinfo(), затем кредиты модулей]