Accessing Cloudflare API with PHP
To manage DNS records using Cloudflare's API with PHP, you'll need to interact with the Cloudflare API endpoints related to DNS. Below are the steps and code examples to guide you through the process.
Setting Up Your Environment
- Ensure your PHP environment is ready with curl and json extensions enabled, as these will be necessary for making REST API calls and handling JSON responses.
- Install a HTTP client library like Guzzle for more straightforward API interaction. You can install Guzzle using Composer:
composer require guzzlehttp/guzzle
Authenticating with the Cloudflare API
- Cloudflare API v4 requires an API Token or API Key for authentication. It is recommended to use an API Token with the necessary permissions scoped for security reasons.
- Store your API Token securely and use it to authenticate requests:
$apiToken = 'YOUR_API_TOKEN';
Fetching DNS Records
- To retrieve DNS records, make a GET request to the Cloudflare endpoint for your zone ID. Use a HTTP client like Guzzle to simplify the request:
use GuzzleHttp\Client;
$client = new Client();
$response = $client->request('GET', 'https://api.cloudflare.com/client/v4/zones/YOUR_ZONE_ID/dns_records', [
'headers' => [
'Authorization' => "Bearer $apiToken",
'Content-Type' => 'application/json',
]
]);
$dnsRecords = json_decode($response->getBody(), true);
print_r($dnsRecords);
Creating a DNS Record
- To add a new DNS record, perform a POST request with the required data fields such as type, name, content, and TTL:
$data = [
'type' => 'A',
'name' => 'example.com',
'content' => '192.0.2.1',
'ttl' => 120
];
$response = $client->request('POST', 'https://api.cloudflare.com/client/v4/zones/YOUR_ZONE_ID/dns_records', [
'headers' => [
'Authorization' => "Bearer $apiToken",
'Content-Type' => 'application/json',
],
'json' => $data
]);
$newRecord = json_decode($response->getBody(), true);
print_r($newRecord);
Updating an Existing DNS Record
- To update an existing DNS record, you must first obtain the Record ID. Then, make a PUT request with the updated data:
$recordId = 'EXISTING_RECORD_ID';
$updateData = [
'type' => 'A',
'name' => 'example.com',
'content' => '203.0.113.5',
'ttl' => 120
];
$response = $client->request('PUT', "https://api.cloudflare.com/client/v4/zones/YOUR_ZONE_ID/dns_records/$recordId", [
'headers' => [
'Authorization' => "Bearer $apiToken",
'Content-Type' => 'application/json',
],
'json' => $updateData
]);
$updatedRecord = json_decode($response->getBody(), true);
print_r($updatedRecord);
Deleting a DNS Record
- To delete a DNS record, make a DELETE request using the Record ID. Confirm the operation with the API response:
$recordId = 'EXISTING_RECORD_ID';
$response = $client->request('DELETE', "https://api.cloudflare.com/client/v4/zones/YOUR_ZONE_ID/dns_records/$recordId", [
'headers' => [
'Authorization' => "Bearer $apiToken",
'Content-Type' => 'application/json',
]
]);
$deleteResponse = json_decode($response->getBody(), true);
print_r($deleteResponse);
Error Handling
- Implement error handling to manage API responses, especially for failed requests which help in debugging and ensuring smooth API interactions:
try {
$response = $client->request('GET', 'https://api.cloudflare.com/client/v4/zones/YOUR_ZONE_ID/dns_records', [
'headers' => [
'Authorization' => "Bearer $apiToken",
'Content-Type' => 'application/json',
]
]);
$dnsRecords = json_decode($response->getBody(), true);
if (!$dnsRecords['success']) {
throw new Exception('Error fetching DNS records: ' . json_encode($dnsRecords['errors']));
}
print_r($dnsRecords);
} catch (Exception $e) {
echo 'API request failed: ', $e->getMessage(), "\n";
}