Phpcredits: примеры (PHP)

Использование phpcredits для отображения информации о разработчиках PHP
Раздел: Информация о PHP
phpcredits(int $flags = CREDITS_ALL): bool

Функция phpcredits() выводит информацию о разработчиках, модулях и других лицах, внесших вклад в создание PHP. Она преимущественно используется для отображения так называемых "кредитов" или титров проекта на специальных информационных страницах, например, в разделах "О системе" веб-приложений или административных панелей.

Аргументы функции

Функция принимает до двух аргументов:

  1. $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) модулей.
  2. $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 и авторов документации]
Похожие функции в PHP

Прямых аналогов 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]
JavaScript (Node.js)

В 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) или находится на официальном сайте.

Типичные ошибки
1. Неверная комбинация флагов

Попытка передать числовое значение вместо предопределенных констант может привести к неожиданному или пустому выводу.

// Ошибка: передано произвольное число
phpcredits(12345);
[Вывод может быть пустым или некорректным]
2. Игнорирование возвращаемого значения

Если установлен второй параметр true, функция ничего не выводит на экран. Ожидание немедленного вывода приведет к "пустой" странице.

// Ошибка: вывод не появится, результат хранится в переменной
phpcredits(CREDITS_ALL, true);
echo "Кредиты выше этой строки"; // Эта строка будет выведена, а кредиты - нет
Кредиты выше этой строки
3. Использование в production-среде

Вывод детальной информации о системе, включая имена разработчиков модулей, может раскрыть используемую версию PHP и помочь в атаке. Рекомендуется отключать или ограничивать вызов таких функций на публичных серверах.

История изменений

Функция phpcredits() является стабильной и давно присутствует в PHP. Существенных изменений в ее поведении или синтаксисе в последних мажорных версиях PHP (7.x, 8.x) не было.

  • Константа CREDITS_SAPI была добавлена в PHP 5.3.0.
  • Поведение и набор выводимой информации обновляются с каждым релизом PHP, так как меняется список контрибьюторов и модулей.
  • Сама функция была введена еще в PHP 4.3.0.

В PHP 8 функция ведет себя идентично своим предшественникам в PHP 7, что обеспечивает обратную совместимость.

Расширенные примеры
Генерация статической страницы "О нас"

Кредиты можно сохранить в файл для последующего использования в админ-панели.

Пример php
// Получаем кредиты для модулей и группы в виде строки
$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()).

Пример php
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, ...
Проверка наличия конкретного разработчика в списке

Теоретический пример для поиска в кредитах.

Пример php
$allCredits = phpcredits(CREDITS_ALL, true);
$searchName = "Rasmus";
if (stripos($allCredits, $searchName) !== false) {
    echo "Сооснователь PHP найден в списке контрибьюторов.";
} else {
    echo "Не найден.";
}
Сооснователь PHP найден в списке контрибьюторов.
Комбинированный вывод с phpinfo()

Создание комплексной информационной страницы.

Пример php
echo '<h2>Конфигурация</h2>';
ob_start();
phpinfo(INFO_MODULES);
echo '<h2>Разработчики модулей</h2>';
phpcredits(CREDITS_MODULES);
$combinedInfo = ob_get_clean();
echo $combinedInfo;
[Выводится сначала информация о модулях от phpinfo(), затем кредиты модулей]

PHP phpcredits function comments

En
Phpcredits Prints out the credits for PHP