MWCodebymw.de ↗
PHP

Claude (Anthropic) aus PHP aufrufen – die Messages-API mit cURL

Ein KI-Feature in deine PHP-Website einbauen, ohne SDK: Die Anthropic Messages-API ist ein einziger HTTP-Endpunkt. Hier der komplette, sichere Aufruf per cURL – mit Key aus der Umgebung, nicht im Code.

Du willst ein KI-Feature in deine PHP-Seite bauen – eine Zusammenfassung, eine Klassifizierung, einen Chat-Assistenten? Bei Claude von Anthropic geht alles über einen einzigen Endpunkt: POST /v1/messages. Du brauchst kein SDK, curl reicht. Wichtig ist nur, den API-Key serverseitig zu halten (nie im Frontend!) und ihn aus der Umgebung zu lesen.

Der komplette Aufruf

<?php
declare(strict_types=1);

function claude_ask(string $prompt): string
{
    $apiKey = getenv('ANTHROPIC_API_KEY');          // Key aus der Umgebung, NICHT im Code
    if ($apiKey === false || $apiKey === '') {
        throw new RuntimeException('ANTHROPIC_API_KEY fehlt');
    }

    $payload = [
        'model'      => 'claude-sonnet-5',           // gutes Preis-/Leistungs-Verhältnis
        'max_tokens' => 1024,                        // Obergrenze der Antwortlänge
        'messages'   => [
            ['role' => 'user', 'content' => $prompt],
        ],
    ];

    $ch = curl_init('https://api.anthropic.com/v1/messages');
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST           => true,
        CURLOPT_HTTPHEADER     => [
            'x-api-key: ' . $apiKey,
            'anthropic-version: 2023-06-01',        // Pflicht-Header
            'content-type: application/json',
        ],
        CURLOPT_POSTFIELDS     => json_encode($payload, JSON_THROW_ON_ERROR),
        CURLOPT_TIMEOUT        => 60,
    ]);

    $res  = curl_exec($ch);
    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if ($res === false || $code >= 400) {
        throw new RuntimeException("Claude-API-Fehler (HTTP $code): $res");
    }

    $data = json_decode($res, true, 512, JSON_THROW_ON_ERROR);

    // content ist ein Array aus Blöcken – der Text steckt im ersten "text"-Block
    foreach ($data['content'] as $block) {
        if (($block['type'] ?? '') === 'text') {
            return $block['text'];
        }
    }
    return '';
}

echo claude_ask('Fasse in einem Satz zusammen, was ein CMS ist.');

Worauf es ankommt

  • anthropic-version: 2023-06-01 ist ein Pflicht-Header – ohne ihn antwortet die API mit 400.
  • max_tokens ist erforderlich und begrenzt die Antwortlänge. Für lange Antworten höher setzen (und dann besser streamen).
  • Die Antwort ist ein Array von Blöcken, nicht ein einzelner String. Greif nie blind auf content[0]['text'] zu – iteriere und prüfe den type, sonst kracht es, sobald ein anderer Block zuerst kommt.
  • Modellwahl: claude-sonnet-5 ist ein guter Standard fürs Web (schnell, günstig, stark). Für die anspruchsvollsten Aufgaben gibt es die Opus-Reihe.

Merksatz zur Sicherheit: Der API-Key gehört ausschließlich auf den Server. Ein Key im JavaScript deiner Seite ist sofort öffentlich – über die Netzwerk-Konsole des Browsers auslesbar. Frontend-Aufrufe gehen daher immer über deinen eigenen PHP-Endpunkt, der den Key hält.

Du willst ein KI-Feature sauber in deine Website integrieren? Sprich mich an.

Quellen

#KI#PHP#Claude#Anthropic#API

Du brauchst mehr als ein Snippet?

Ich entwickle Android-Apps in Kotlin und moderne Websites für Selbstständige und kleine Unternehmen — von der ersten Idee bis zum Release.

Projekt anfragen →