[PHP]phpcredits関数の使い方を徹底解説!PHP開発者情報の表示方法

PHP

PHPの情報を表示する関数としてphpinfo()はよく知られていますが、PHP開発に貢献した人々の情報を表示するphpcredits()という関数も存在します。この記事では、phpcredits関数について、その使い方や活用方法を詳しく解説していきます。

phpcredits関数とは?

phpcreditsは、PHPの開発に貢献した開発者や組織のクレジット情報を表示するための関数です。オープンソースプロジェクトであるPHPへの貢献者を確認したり、ライセンス情報を表示したりする際に使用します。

基本的な構文

bool phpcredits(int $flags = CREDITS_ALL)

パラメータ:

  • $flags: 表示する情報の種類を指定する定数(オプション)

戻り値:

  • 常にtrueを返す

表示できる情報の種類

phpcredits関数では、フラグを使って表示する情報をカスタマイズできます。

利用可能なフラグ定数

定数説明
CREDITS_ALL-1すべてのクレジット情報(デフォルト)
CREDITS_GENERAL1PHP全般のクレジット
CREDITS_GROUP2コア開発者のリスト
CREDITS_DOCS4ドキュメントチーム
CREDITS_MODULES8PHP拡張モジュールとその開発者
CREDITS_FULLPAGE16完全なHTMLページとして出力
CREDITS_QA32品質保証チーム
CREDITS_SAPI64サーバーAPIモジュール

フラグの組み合わせ

複数のフラグを組み合わせることも可能です。

<?php
// コア開発者とドキュメントチームを表示
phpcredits(CREDITS_GROUP | CREDITS_DOCS);
?>

基本的な使い方

すべてのクレジットを表示

<?php
// すべてのクレジット情報を表示
phpcredits();

// または明示的に指定
phpcredits(CREDITS_ALL);
?>

特定の情報だけを表示

<?php
// コア開発者のみ表示
phpcredits(CREDITS_GROUP);

// モジュール開発者のみ表示
phpcredits(CREDITS_MODULES);

// 完全なHTMLページとして表示
phpcredits(CREDITS_FULLPAGE);
?>

複数の情報を組み合わせて表示

<?php
// 一般情報とコア開発者を表示
phpcredits(CREDITS_GENERAL | CREDITS_GROUP);

// コア開発者、ドキュメント、QAチームを表示
phpcredits(CREDITS_GROUP | CREDITS_DOCS | CREDITS_QA);
?>

実践的な使用例

1. カスタム情報ページの作成

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>PHP クレジット情報</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            max-width: 1200px;
            margin: 0 auto;
            padding: 20px;
            background-color: #f5f5f5;
        }
        .container {
            background-color: white;
            padding: 30px;
            border-radius: 8px;
            box-shadow: 0 2px 4px rgba(0,0,0,0.1);
        }
        h1 {
            color: #333;
            border-bottom: 3px solid #8892BF;
            padding-bottom: 10px;
        }
        .info-section {
            margin: 20px 0;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>PHP クレジット情報</h1>
        
        <div class="info-section">
            <h2>PHP バージョン: <?php echo PHP_VERSION; ?></h2>
            <p>このページでは、PHPの開発に貢献した方々の情報を表示しています。</p>
        </div>
        
        <div class="info-section">
            <?php
            // PHPのクレジット情報を表示
            phpcredits(CREDITS_ALL);
            ?>
        </div>
        
        <div class="info-section">
            <p><small>このページは <?php echo date('Y-m-d H:i:s'); ?> に生成されました。</small></p>
        </div>
    </div>
</body>
</html>

2. 管理画面でのシステム情報表示

<?php
// 管理者権限チェック(簡易版)
session_start();
if (!isset($_SESSION['is_admin']) || !$_SESSION['is_admin']) {
    die('アクセス権限がありません');
}

function displaySystemInfo() {
    ?>
    <!DOCTYPE html>
    <html lang="ja">
    <head>
        <meta charset="UTF-8">
        <title>システム情報 - 管理画面</title>
        <style>
            .admin-panel {
                max-width: 1400px;
                margin: 0 auto;
                padding: 20px;
            }
            .info-box {
                background: #fff;
                border: 1px solid #ddd;
                border-radius: 4px;
                padding: 20px;
                margin-bottom: 20px;
            }
            .info-box h2 {
                margin-top: 0;
                color: #2c3e50;
            }
            .tab-buttons {
                display: flex;
                gap: 10px;
                margin-bottom: 20px;
            }
            .tab-button {
                padding: 10px 20px;
                background: #3498db;
                color: white;
                border: none;
                border-radius: 4px;
                cursor: pointer;
            }
            .tab-button:hover {
                background: #2980b9;
            }
        </style>
    </head>
    <body>
        <div class="admin-panel">
            <h1>システム情報</h1>
            
            <div class="tab-buttons">
                <button class="tab-button" onclick="location.href='?view=phpinfo'">PHP設定情報</button>
                <button class="tab-button" onclick="location.href='?view=credits'">開発者クレジット</button>
                <button class="tab-button" onclick="location.href='?view=summary'">サマリー</button>
            </div>
            
            <?php
            $view = $_GET['view'] ?? 'summary';
            
            switch ($view) {
                case 'phpinfo':
                    echo '<div class="info-box">';
                    phpinfo();
                    echo '</div>';
                    break;
                    
                case 'credits':
                    echo '<div class="info-box">';
                    phpcredits(CREDITS_ALL);
                    echo '</div>';
                    break;
                    
                case 'summary':
                default:
                    ?>
                    <div class="info-box">
                        <h2>PHP バージョン情報</h2>
                        <p><strong>バージョン:</strong> <?php echo PHP_VERSION; ?></p>
                        <p><strong>Zend Engine:</strong> <?php echo zend_version(); ?></p>
                        <p><strong>サーバーAPI:</strong> <?php echo php_sapi_name(); ?></p>
                    </div>
                    
                    <div class="info-box">
                        <h2>システム情報</h2>
                        <p><strong>OS:</strong> <?php echo PHP_OS; ?></p>
                        <p><strong>サーバーソフトウェア:</strong> <?php echo $_SERVER['SERVER_SOFTWARE'] ?? 'Unknown'; ?></p>
                        <p><strong>ドキュメントルート:</strong> <?php echo $_SERVER['DOCUMENT_ROOT'] ?? 'Unknown'; ?></p>
                    </div>
                    
                    <div class="info-box">
                        <h2>読み込まれている拡張モジュール</h2>
                        <ul>
                            <?php
                            $extensions = get_loaded_extensions();
                            sort($extensions);
                            foreach ($extensions as $ext) {
                                echo "<li>{$ext}</li>";
                            }
                            ?>
                        </ul>
                    </div>
                    <?php
                    break;
            }
            ?>
        </div>
    </body>
    </html>
    <?php
}

displaySystemInfo();
?>

3. クレジット情報のテキスト出力

<?php
/**
 * PHPクレジット情報をテキスト形式で取得
 */
function getPhpCreditsText() {
    // 出力バッファリングを開始
    ob_start();
    
    // クレジット情報を出力
    phpcredits(CREDITS_ALL);
    
    // バッファの内容を取得
    $html = ob_get_clean();
    
    // HTMLタグを除去してテキストに変換
    $text = strip_tags($html);
    
    // 余分な空白を整理
    $text = preg_replace('/\s+/', ' ', $text);
    $text = trim($text);
    
    return $text;
}

// 使用例: ログファイルに保存
$credits = getPhpCreditsText();
file_put_contents('php_credits.txt', $credits);

echo "クレジット情報をテキストファイルに保存しました。\n";
?>

4. APIレスポンスとしてのクレジット情報

<?php
header('Content-Type: application/json; charset=utf-8');

/**
 * PHPクレジット情報をJSON形式で返す
 */
function getPhpCreditsJson() {
    // 出力バッファリング
    ob_start();
    phpcredits(CREDITS_ALL);
    $html = ob_get_clean();
    
    return [
        'php_version' => PHP_VERSION,
        'zend_version' => zend_version(),
        'credits_html' => $html,
        'credits_text' => strip_tags($html),
        'generated_at' => date('c')
    ];
}

// JSON出力
echo json_encode(getPhpCreditsJson(), JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
?>

5. デバッグ情報の収集

<?php
class SystemDebugInfo {
    
    /**
     * 包括的なシステム情報を収集
     */
    public static function collectInfo() {
        $info = [];
        
        // PHP基本情報
        $info['php'] = [
            'version' => PHP_VERSION,
            'zend_version' => zend_version(),
            'sapi' => php_sapi_name(),
            'os' => PHP_OS,
            'architecture' => PHP_INT_SIZE * 8 . '-bit'
        ];
        
        // 拡張モジュール
        $info['extensions'] = get_loaded_extensions();
        
        // PHPクレジット情報を取得
        ob_start();
        phpcredits(CREDITS_GROUP);
        $credits_group = ob_get_clean();
        
        ob_start();
        phpcredits(CREDITS_MODULES);
        $credits_modules = ob_get_clean();
        
        $info['credits'] = [
            'core_developers' => strip_tags($credits_group),
            'module_developers' => strip_tags($credits_modules)
        ];
        
        // 設定情報
        $info['config'] = [
            'memory_limit' => ini_get('memory_limit'),
            'max_execution_time' => ini_get('max_execution_time'),
            'upload_max_filesize' => ini_get('upload_max_filesize'),
            'post_max_size' => ini_get('post_max_size'),
            'display_errors' => ini_get('display_errors'),
            'error_reporting' => ini_get('error_reporting')
        ];
        
        return $info;
    }
    
    /**
     * 情報をHTMLで表示
     */
    public static function displayHtml() {
        $info = self::collectInfo();
        ?>
        <!DOCTYPE html>
        <html lang="ja">
        <head>
            <meta charset="UTF-8">
            <title>システムデバッグ情報</title>
            <style>
                body { font-family: monospace; padding: 20px; background: #1e1e1e; color: #d4d4d4; }
                .section { background: #252526; padding: 15px; margin: 10px 0; border-radius: 4px; }
                h2 { color: #4ec9b0; margin-top: 0; }
                pre { background: #1e1e1e; padding: 10px; overflow-x: auto; border-left: 3px solid #007acc; }
                .key { color: #9cdcfe; }
                .value { color: #ce9178; }
            </style>
        </head>
        <body>
            <h1>🔍 システムデバッグ情報</h1>
            
            <div class="section">
                <h2>PHP 情報</h2>
                <pre><?php print_r($info['php']); ?></pre>
            </div>
            
            <div class="section">
                <h2>読み込まれている拡張モジュール (<?php echo count($info['extensions']); ?>個)</h2>
                <pre><?php echo implode(', ', $info['extensions']); ?></pre>
            </div>
            
            <div class="section">
                <h2>設定情報</h2>
                <pre><?php print_r($info['config']); ?></pre>
            </div>
            
            <div class="section">
                <h2>開発者クレジット</h2>
                <?php phpcredits(CREDITS_ALL); ?>
            </div>
            
            <div class="section">
                <p><small>生成日時: <?php echo date('Y-m-d H:i:s'); ?></small></p>
            </div>
        </body>
        </html>
        <?php
    }
    
    /**
     * 情報をログファイルに保存
     */
    public static function saveToLog($filename = 'system_info.log') {
        $info = self::collectInfo();
        $log = "=== システム情報 ===\n";
        $log .= "生成日時: " . date('Y-m-d H:i:s') . "\n\n";
        $log .= print_r($info, true);
        
        file_put_contents($filename, $log);
        return $filename;
    }
}

// 使用例
if (isset($_GET['action'])) {
    switch ($_GET['action']) {
        case 'display':
            SystemDebugInfo::displayHtml();
            break;
        case 'save':
            $file = SystemDebugInfo::saveToLog();
            echo "システム情報を {$file} に保存しました。";
            break;
        case 'json':
            header('Content-Type: application/json');
            echo json_encode(SystemDebugInfo::collectInfo(), JSON_PRETTY_PRINT);
            break;
        default:
            echo "利用可能なアクション: display, save, json";
    }
} else {
    SystemDebugInfo::displayHtml();
}
?>

phpinfoとの違い

phpcredits()phpinfo()は似ていますが、表示する情報が異なります。

<?php
// phpinfo: PHP設定とシステム情報を表示
phpinfo();

// phpcredits: 開発者のクレジット情報を表示
phpcredits();
?>

使い分けのポイント

  • phpinfo()を使う場合:
    • PHP設定の確認
    • インストールされているモジュールの確認
    • サーバー環境の診断
    • パフォーマンスチューニング
  • phpcredits()を使う場合:
    • オープンソースのクレジット表示
    • ライセンス情報の確認
    • 貢献者の確認
    • About ページの作成

セキュリティ上の注意点

本番環境での使用は避ける

<?php
// ❌ 本番環境で誰でもアクセスできる状態は危険
phpcredits();

// ✅ 開発環境のみ、または管理者のみアクセス可能にする
if (getenv('APP_ENV') === 'development' || isAdmin()) {
    phpcredits();
} else {
    http_response_code(403);
    die('アクセスが拒否されました');
}
?>

アクセス制限の実装例

<?php
// IPアドレスによる制限
$allowedIPs = ['127.0.0.1', '::1', '192.168.1.100'];
$clientIP = $_SERVER['REMOTE_ADDR'];

if (!in_array($clientIP, $allowedIPs)) {
    http_response_code(403);
    die('このページへのアクセスは許可されていません');
}

// 認証による制限
session_start();
if (!isset($_SESSION['is_admin']) || !$_SESSION['is_admin']) {
    http_response_code(403);
    die('管理者権限が必要です');
}

// 表示
phpcredits(CREDITS_ALL);
?>

よくある使用シーンと実装例

Aboutページでの使用

<?php
function renderAboutPage() {
    ?>
    <!DOCTYPE html>
    <html lang="ja">
    <head>
        <meta charset="UTF-8">
        <title>About - 当サイトについて</title>
        <style>
            .about-container { max-width: 900px; margin: 0 auto; padding: 40px 20px; }
            .tech-stack { background: #f9f9f9; padding: 20px; border-radius: 8px; margin: 20px 0; }
        </style>
    </head>
    <body>
        <div class="about-container">
            <h1>当サイトについて</h1>
            
            <div class="tech-stack">
                <h2>使用技術</h2>
                <p>このサイトは以下の技術で構築されています:</p>
                <ul>
                    <li>PHP <?php echo PHP_VERSION; ?></li>
                    <li>MySQL 8.0</li>
                    <li>Nginx</li>
                </ul>
            </div>
            
            <details>
                <summary>PHP クレジット情報</summary>
                <div style="margin-top: 20px;">
                    <?php phpcredits(CREDITS_GENERAL | CREDITS_GROUP); ?>
                </div>
            </details>
        </div>
    </body>
    </html>
    <?php
}

renderAboutPage();
?>

まとめ

phpcredits関数は、PHPの開発者情報を表示するためのシンプルな関数です。以下のポイントを押さえておきましょう。

  • PHPの開発に貢献した人々のクレジット情報を表示
  • フラグを使って表示する情報をカスタマイズ可能
  • phpinfo()とは異なり、設定情報ではなく開発者情報を表示
  • 管理画面やAboutページでの使用に適している
  • 本番環境では適切なアクセス制限を実装すべき
  • 出力バッファリングでHTML出力を取得・加工できる

この関数は頻繁に使うものではありませんが、オープンソースへの敬意を表したり、システム情報ページを作成したりする際に便利です。適切なセキュリティ対策を施した上で活用しましょう!

タイトルとURLをコピーしました