Перевод статьи подготовлен в преддверии старта курса «Backend-разработчик на PHP».




Для тех разработчиков, которые используют PHP 7.0 или выше, Cloudflare предоставляет PHP API биндинг. Он поддерживает последнюю четвертую версию API Cloudflare. Вы можете использовать этот SDK для ряда целей, включая такие как:

  • Управление и автоматизация изменений в своих DNS-записях в Cloudflare.
  • Программное добавление зон в свою учетную запись.
  • Версионирование и управление изменениями в Page Rules
  • Автоматическая блокировка IP-адресов и User Agent-ов с использованием Zone Lockdown и UserAgent Rules.
  • Получение IP-диапазонов Cloudflare для автоматизации вайтлистинга файрволом

Поддерживаемые функции


В этой статье приводятся несколько распространенных примеров использования PHP API биндинга Cloudflare; в настоящее время мы поддерживаем следующие эндпоинты и методы аутентификации:

V4 Эндпоинты

  • DNS
  • IPs
  • Page Rules
  • User Agent Rules
  • User Management (частичное)
  • Zone Lockdown
  • Zones

Аутентификации

  • User Service Keys
  • API Keys

Установка


Cloudflare PHP API биндинг доступен на Packagist в cloudflare/sdk, который может быть установлен с использованием Composer с помощью вызова composer require cloudflare/sdk:



Также если вы хотите ознакомиться непосредственно с исходным кодом или внести свой вклад в проект, вы можете найти исходный код на GitHub в репозитории cloudflare/cloudflare-php.

Начало работы


Вот небольшой пример работы с API

<?php

require_once('vendor/autoload.php');

$key = new \Cloudflare\API\Auth\APIKey('mjsa@junade.com', 'API KEY GOES HERE');
$adapter = new Cloudflare\API\Adapter\Guzzle($key);
$user = new \Cloudflare\API\Endpoints\User($adapter);

echo 'Your user ID is: ' . $user->getUserID() . PHP_EOL;


Запустив этот простой скрипт в командной строке, мы получим следующий вывод:



Листинг зон


Вот как можно перечислить все зоны в учетной записи с помощью следующего кода:

<?php

require_once('vendor/autoload.php');

$key = new \Cloudflare\API\Auth\APIKey('mjsa@junade.com', 'API KEY GOES HERE');
$adapter = new Cloudflare\API\Adapter\Guzzle($key);

$zones = new \Cloudflare\API\Endpoints\Zones($adapter);
foreach ($zones->listZones()->result as $zone) {
   echo $zone->name.' ('.$zone->plan->name.')'.PHP_EOL;
}

Запуск этого скрипта через командную строку даст следующий вывод:



Очистка кэша на всех веб-сайтах


Вот еще один пример, который использует эндпоинт Purge Cache для полной очистки кэша на каждом веб-сайте нашей учетной записи (обратите внимание, что вы можете очистить отдельные файлы, использующие кэш, задействовав метод cachePurge вместо cachePurgeEverything):

<?php

require_once('vendor/autoload.php');

$key = new \Cloudflare\API\Auth\APIKey('mjsa@junade.com', 'API KEY GOES HERE');
$adapter = new Cloudflare\API\Adapter\Guzzle($key);

$zones = new \Cloudflare\API\Endpoints\Zones($adapter);
foreach ($zones->listZones()->result as $zone) {
   echo "Cache purge for " . $zone->name . ": ";
   echo $zones->cachePurgeEverything($zone->id) == true ? "successful" : "failed";
   echo PHP_EOL;

}

Вы увидите следующий вывод в результате запуска этого скрипта в командной строке:



Создание Page Rules


SDK также можно использовать для программного добавления Page Rules в Cloudflare Zone. Вот простой пример добавления правила Cache Bypass:

<?php

require_once('vendor/autoload.php');

$key = new \Cloudflare\API\Auth\APIKey('mjsa@junade.com', 'API KEY GOES HERE');
$adapter = new Cloudflare\API\Adapter\Guzzle($key);
$zones = new \Cloudflare\API\Endpoints\Zones($adapter);

$zoneID = $zones->getZoneID("junade.com");

$pageRulesTarget = new \Cloudflare\API\Configurations\PageRulesTargets('https://junade.com/noCache/*');

$pageRulesConfig = new \Cloudflare\API\Configurations\PageRulesActions();
$pageRulesConfig->setCacheLevel('bypass');

$pageRules = new \Cloudflare\API\Endpoints\PageRules($adapter);
$pageRules->createPageRule($zoneID, $pageRulesTarget, $pageRulesConfig, true, 6);

Мы можем легко получить ID нужной зоны, используя метод getZoneID класса эндпоинта Zones — этот вспомогательный метод возвращает ID по имени зоны.

Обратите внимание, что SDK использует внедрение зависимостей для указания цели и конфигурации правил страницы. Вот почему нам нужно передать экземпляры классов PageRulesTargets и PageRuleActions в метод createPageRule.

DNS


SDK также можно использовать для программного добавления записей. Вот пример добавления DNS-записи:

<?php

require_once('vendor/autoload.php');

$key = new \Cloudflare\API\Auth\APIKey('mjsa@junade.com', 'API KEY GOES HERE');
$adapter = new Cloudflare\API\Adapter\Guzzle($key);
$zones = new \Cloudflare\API\Endpoints\Zones($adapter);

$zoneID = $zones->getZoneID("junade.com");

$dns = new \Cloudflare\API\Endpoints\DNS($adapter);
if ($dns->addRecord($zoneID, "A", 'example', '8.8.8.8', 0, true) === true) {
   echo "DNS record created.". PHP_EOL;
}

Кроме того, мы также можем удалять, перечислять и просматривать детали DNS-записей с помощью этого SDK. Например, давайте создадим простой скрипт для перечисления типа и имени каждой DNS-записи в нашей зоне:

<?php

require_once('vendor/autoload.php');

$key = new \Cloudflare\API\Auth\APIKey('mjsa@junade.com', 'API KEY GOES HERE');
$adapter = new Cloudflare\API\Adapter\Guzzle($key);
$zones = new \Cloudflare\API\Endpoints\Zones($adapter);

$zoneID = $zones->getZoneID("icyapril.com");

$dns = new \Cloudflare\API\Endpoints\DNS($adapter);
foreach ($dns->listRecords($zoneID)->result as $record) {
   echo $record->type." ".$record->name.PHP_EOL;
}

Таким будет вывод, когда я запущу этот скрипт для одной из моих зон:





Узнать подробнее о курсе