Utiliser une IA avec PHP
Comprendre comment interroger une IA, via une API REST, avec PHP
Notions théoriques
PHP, c'est quoi ?
PHP est un langage de programmation côté serveur principalement utilisé pour créer des sites web dynamiques.
Il est très populaire grâce à sa simplicité d’apprentissage et à son écosystème riche (WordPress, Laravel, Symfony, Drupal, etc.).
Voici quelques ressources pour apprendre ou se perfectionner en PHP :
Une API, c'est quoi ?
API et intelligence artificielle
Une API (Application Programming Interface) est un ensemble de règles qui permet à 2 logiciels de communiquer entre eux.
L’IA utilisée ici est de type LLM (Large Language Model), un modèle de traitement du langage naturel entraîné à comprendre et générer du texte.
L’API permet d’envoyer une requête à un modèle d’IA et de recevoir une réponse générée automatiquement.
Quelle API utiliser ?

Nous allons utiliser OpenRouter, une alternative gratuite (ou très économique) à OpenAI.
OpenRouter est une plateforme qui permet d’accéder à plusieurs modèles d'IA à travers une API unique :
- OpenRouter est gratuit dans sa version de base pour de nombreux modèles
- OpenRouter fonctionne avec une clé API que vous pouvez obtenir en quelques clics
- OpenRouter donne accès à des modèles de fournisseurs populaires (OpenAI, Anthropic, Google, Mistral, etc.)
OpenRouter propose par exemple
arcee-ai/trinity-mini:free,google/gemma-3n-e2b-it:freeounvidia/nemotron-3-nano-30b-a3b:free— tous gratuits et rapides.
Avec OpenRouter, vous n'avez pas besoin de créer un compte chez chaque fournisseur d’IA.
OpenRouter joue le rôle d’intermédiaire intelligent.
Comment fonctionne l’API OpenRouter ?
L’API d’OpenRouter est compatible avec le format de l’API Chat Completions d’OpenAI.
- Vous envoyez un prompt (instruction + question)
- Vous recevez une réponse générée par le modèle choisi
Liste des modèles gratuits et rapides (triés par faible latence) :
https://openrouter.ai/models?fmt=cards&input_modalities=text&max_price=0&output_modalities=text&order=latency-low-to-high
Pourquoi utiliser PHP ?
PHP reste l’un des langages les plus utilisés au monde pour créer des sites web dynamiques.
Il est particulièrement adapté quand :
- votre projet est déjà en PHP (WordPress, Laravel, Symfony, etc.)
- vous voulez ajouter une fonctionnalité d’IA directement dans un site existant
- vous préférez ne pas ajouter une couche Python / Node.js supplémentaire
Fonctionnement général
Étapes pour utiliser OpenRouter avec PHP :
- Créer un compte sur https://openrouter.ai et récupérer une clé API
- Choisir un modèle gratuit (ex :
arcee-ai/trinity-mini:free) - Envoyer une requête POST au format JSON vers l’endpoint OpenRouter
- Lire et afficher / traiter la réponse JSON
Format d’une requête à l’API
URL de l’API :
https://openrouter.ai/api/v1/chat/completions
Exemple de corps JSON attendu :
{
"model": "arcee-ai/trinity-mini:free",
"messages": [
{
"role": "user",
"content": "Quelle est la différence entre include() et require() en PHP ?"
}
],
"temperature": 0.7
}
L’authentification se fait via l’en-tête :
Authorization: Bearer sk-or-v1-votre_clé_ici
Ne jamais publier votre clé API dans un dépôt git public ou dans le code source visible côté client.
Exemple pratique
Voici un script PHP complet et commenté qui interroge OpenRouter :
<?php
// === CONFIGURATION ===
$apiKey = getenv('OPENROUTER_API_KEY') ?: 'sk-or-v1-xxxxxxxxxxxxxxxxxxxxxxxx'; // ← À sécuriser !
$model = 'arcee-ai/trinity-mini:free';
$headers = [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
];
$data = [
'model' => $model,
'messages' => [
[
'role' => 'user',
'content' => 'Quelle est la différence entre include() et require() en PHP ?'
]
],
'temperature' => 0.7,
];
// === ENVOI DE LA REQUÊTE ===
$ch = curl_init('https://openrouter.ai/api/v1/chat/completions');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
// === TRAITEMENT DE LA RÉPONSE ===
if ($httpCode === 200) {
$result = json_decode($response, true);
$answer = $result['choices'][0]['message']['content'] ?? '(réponse non trouvée)';
echo "Réponse de l'IA :\n";
echo "------------------------\n";
echo $answer . "\n";
} else {
echo "Erreur HTTP $httpCode\n";
echo $response . "\n";
}
📌 Explications détaillées du code
1. Récupération de la clé API (sécurisée)
$apiKey = getenv('OPENROUTER_API_KEY') ?: 'sk-or-v1-xxxxxxxxxxxxxxxxxxxxxxxx';
On essaie de lire la clé depuis une variable d’environnement (recommandé en production).
2. Préparation des en-têtes
$headers = [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json',
];
3. Corps de la requête (payload)
$data = [
'model' => $model,
'messages' => [ /* ... */ ],
'temperature' => 0.7,
];
4. Envoi via cURL (méthode la plus fiable en PHP)
$ch = curl_init('https://openrouter.ai/api/v1/chat/completions');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
$response = curl_exec($ch);
5. Gestion de la réponse
if ($httpCode === 200) {
$result = json_decode($response, true);
$answer = $result['choices'][0]['message']['content'] ?? '(réponse non trouvée)';
echo $answer;
} else {
echo "Erreur HTTP $httpCode\n";
echo $response;
}
En production, on préfère :
- stocker la clé dans
.env+vlucas/phpdotenv - gérer les erreurs avec des exceptions
- ajouter un timeout raisonnable
- logger les erreurs