When PHP Meets AI: Why It Works
\n\nImagine: you're writing code in PHP, and suddenly you have a colleague who never sleeps, doesn't ask for a salary, and can generate a description for a thousand products in a second, write a letter to a client, or even help debug a complex SQL query. Sounds like science fiction? Well, it's not. This is the reality of integrating ChatGPT into PHP projects.
\n\nPHP has long been the "workhorse" of the web, but with the arrival of AI, it has gained a second wind. You no longer need to write tons of boilerplate code manually — the neural network takes over the routine, and you focus on the architecture. In this article, we'll break down how to connect ChatGPT to your PHP application, and we'll do it as practically as possible.
\n\nWhat You'll Need to Get Started?
\n\nBefore diving into the code, make sure you have:
\n\n- \n
- PHP 8.0+ — to work with modern features (typing, attributes). \n
- cURL — to send requests to the OpenAI API. \n
- OpenAI API key — register at platform.openai.com and create a key. \n
- Composer — for convenient dependency management (although you can do without it). \n
Ready? Let's go.
\n\nBasic Connection: Sending Your First Request to ChatGPT
\n\nLet's start with the simplest thing — sending a message to ChatGPT and getting a response. OpenAI uses a REST API, so we need a regular HTTP request. Here's a minimal working class:
\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// Usage\n$client = new ChatGPTClient('your-api-key-here');\necho $client->ask('Write a short greeting for a PHP website');\n\nThis code is the foundation. Note: we use gpt-3.5-turbo — it's cheap and fast. For complex tasks, you can switch to gpt-4, but it's more expensive.
Error Handling and Rate Limits
\n\nReal projects require more robust handling. Add retries for 429 errors (too many requests) and logging:
\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)); // exponential backoff\n continue;\n }\n throw $e;\n }\n }\n}\n\nAdvanced Scenarios: From Content Generation to Data Analysis
\n\nNow that the basics are ready, let's look at how Cha