Quand PHP rencontre l'IA : pourquoi ça fonctionne
\n\nImaginez : vous écrivez du code en PHP, et soudain vous avez un collègue qui ne dort jamais, ne demande pas de salaire et peut générer en une seconde une description pour mille produits, écrire une lettre à un client ou même vous aider à déboguer une requête SQL complexe. Cela semble fantastique ? Et pourtant non. C'est la réalité avec l'intégration de ChatGPT dans les projets PHP.
\n\nPHP est resté longtemps le « cheval de bataille » du web, mais avec l'arrivée de l'IA, il a trouvé un second souffle. Fini d'écrire des tonnes de code standard à la main — le réseau de neurones prend en charge la routine, et vous vous concentrez sur l'architecture. Dans cet article, nous allons voir comment connecter ChatGPT à votre application PHP, et ce de la manière la plus pratique possible.
\n\nDe quoi avez-vous besoin pour commencer ?
\n\nAvant de plonger dans le code, assurez-vous d'avoir :
\n\n- \n
- PHP 8.0+ — pour travailler avec les fonctionnalités modernes (typage, attributs). \n
- cURL — pour envoyer des requêtes à l'API OpenAI. \n
- Une clé API OpenAI — inscrivez-vous sur platform.openai.com et créez une clé. \n
- Composer — pour une gestion pratique des dépendances (bien que ce soit possible sans). \n
Prêts ? C'est parti.
\n\nConnexion de base : envoyer votre première requête à ChatGPT
\n\nCommençons par le plus simple — envoyer un message à ChatGPT et recevoir une réponse. OpenAI utilise une API REST, nous avons donc besoin d'une simple requête HTTP. Voici une classe minimale fonctionnelle :
\n\n<?php\n\nclass ChatGPTClient {\n private string $apiKey;\n private string $apiUrl = 'https://api.openai.com/v1/chat/completions';\n\n public function __construct(string $apiKey) {\n $this->apiKey = $apiKey;\n }\n\n public function ask(string $message): string {\n $data = [\n 'model' => 'gpt-3.5-turbo',\n 'messages' => [\n ['role' => 'user', 'content' => $message]\n ],\n 'temperature' => 0.7\n ];\n\n $ch = curl_init($this->apiUrl);\n curl_setopt_array($ch, [\n CURLOPT_RETURNTRANSFER => true,\n CURLOPT_POST => true,\n CURLOPT_HTTPHEADER => [\n 'Content-Type: application/json',\n 'Authorization: Bearer ' . $this->apiKey\n ],\n CURLOPT_POSTFIELDS => json_encode($data)\n ]);\n\n $response = curl_exec($ch);\n $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);\n curl_close($ch);\n\n if ($httpCode !== 200) {\n throw new \\RuntimeException("API error: $httpCode - $response");\n }\n\n $result = json_decode($response, true);\n return $result['choices'][0]['message']['content'] ?? '';\n }\n}\n\n// Utilisation\n$client = new ChatGPTClient('your-api-key-here');\necho $client->ask('Écris un court message de bienvenue pour un site en PHP');\n\nCe code est la base. Notez que nous utilisons gpt-3.5-turbo — il est économique et rapide. Pour des tâches complexes, vous pouvez passer à gpt-4, mais c'est plus cher.
Gestion des erreurs et des limites
\n\nLes projets réels nécessitent une gestion plus robuste. Ajoutez des tentatives en cas d'erreur 429 (trop de requêtes) et une journalisation :
\n\npublic function askWithRetry(string $message, int $maxRetries = 3): string {\n for ($attempt = 1; $attempt <= $maxRetries; $attempt++) {\n try {\n return $this->ask($message);\n } catch (\\RuntimeException $e) {\n if (str_contains($e->getMessage(), '429') && $attempt < $maxRetries) {\n sleep(pow(2, $attempt)); // délai exponentiel\n continue;\n }\n throw $e;\n }\n }\n}\n\nScénarios avancés : de la génération de contenu à l'analyse de données
\n\nMaintenant que la base est prête, voyons comment Cha