Löschen des Cloudflare-Cache über ihre API in PHP

Lesezeit: 3 Minuten

Ich bin auf dieses Problem bei der Website eines Freundes gestoßen. Es ist eine WordPress-Installation mit mehreren Plugins. Eines dieser Plugins wird verwendet, um mehrere Bilder zu aktualisieren (sie von entfernten Standorten zu sammeln und lokal zu speichern, um Bandbreite zu sparen). Aber beim Ausführen des Plugins weigerte sich die Website anscheinend, die aktualisierten Bilder anzuzeigen, und gab mir kontinuierlich die alte Version, die definitiv nicht mehr auf dem Server vorhanden war.

Browser-Cache wurde als Ursache schnell ausgeschlossen. WordPress kann ein bisschen knifflig sein, also habe ich alle anderen Plugins, Drop-Ins und ob irgendeine Form von Objekt-Cache aktiv war, überprüft. Nachdem ich das auch ausgeschlossen hatte, kam mir der Gedanke, dass der Hosting-Provider das Problem sein muss. Ich wusste nicht und musste herausfinden, dass sie Cloudflare als DNS-Anbieter verwenden, um ein gültiges SSL-Zertifikat für ihre Website zu haben. Allerdings verfügt Cloudflare standardmäßig auch über Caching, was ziemlich aggressiv sein kann.

Da sie das Caching mochten und es eingeschaltet lassen wollten, sagte ich meinem Freund, er solle den Cache bei Cloudflare manuell löschen. Ta-Da – die aktualisierten Bilder wurden so angezeigt, wie sie sollten.

Um also den Prozess der Anmeldung bei Cloudflare bei jedem Aufruf des Plugins zu vermeiden, suchte ich nach einer Möglichkeit, ihre API zu verwenden, um dies auf bequeme Weise zu lösen. Ich brauchte etwas PHP-Code (zur Integration in das WordPress-Plugin)…

Benutzeravatar von FabianS
FabianS

Ich habe ein kleines und sicher verbesserungsfähiges php-Skript geschrieben, das genau diesem Zweck dient. Es verwendet die angegebenen Anmeldeinformationen (Benutzer-E-Mail und API-Schlüssel), um eine Verbindung zur API von Cloudflare herzustellen. So rufen Sie den API-Schlüssel ab:

  1. Anmeldung zum Cloudflare-Konto.

  2. Gehe zu Mein Profil.

  3. Scrollen Sie nach unten zu API-Schlüsseln und lokalisieren Globaler API-Schlüssel.

  4. Klicken Sie auf API-Schlüssel um Ihre API-ID anzuzeigen.

Im ersten Schritt fragt das Skript die sogenannte Zonen-ID ab, die eine eindeutige Kennung für die Domain ist, die Sie kontrollieren möchten. Da Cloudflare bisher keine Möglichkeit bietet, diese ID in ihrem Backend anzuzeigen, kann sie nur über eine API-Anfrage abgerufen werden.

Im zweiten Schritt stellen wir erneut eine Verbindung zur API von Cloudflare her und weisen dieses Mal an, den gesamten Cache für diese Zone zu löschen.

Hier ist meine Lösung (ich füge dies an das Ende meines Plugin-Updater-Skripts, um es auszuführen, nachdem alles andere fertig ist):

<?php

    //Credentials for Cloudflare
    $cust_email=""; //[email protected]
    $cust_xauth=""; //retrieved from the backend after loggin in
    $cust_domain = ''; //domain.tld, the domain you want to control

    if($cust_email == "" || $cust_xauth == "" || $cust_domain == "") return;

    //Get the Zone-ID from Cloudflare since they don't provide that in the Backend
    $ch_query = curl_init();
    curl_setopt($ch_query, CURLOPT_URL, "https://api.cloudflare.com/client/v4/zones?name=".$cust_domain."&status=active&page=1&per_page=5&order=status&direction=desc&match=all");
    curl_setopt($ch_query, CURLOPT_RETURNTRANSFER, 1);
    $qheaders = array(
        'X-Auth-Email: '.$cust_email.'',
        'X-Auth-Key: '.$cust_xauth.'',
        'Content-Type: application/json'
    );
    curl_setopt($ch_query, CURLOPT_HTTPHEADER, $qheaders);
    $qresult = json_decode(curl_exec($ch_query),true);
    curl_close($ch_query);

    $cust_zone = $qresult['result'][0]['id']; 

    //Purge the entire cache via API
    $ch_purge = curl_init();
    curl_setopt($ch_purge, CURLOPT_URL, "https://api.cloudflare.com/client/v4/zones/".$cust_zone."/purge_cache");
    curl_setopt($ch_purge, CURLOPT_CUSTOMREQUEST, "DELETE");
    curl_setopt($ch_purge, CURLOPT_RETURNTRANSFER, 1);
    $headers = [
        'X-Auth-Email: '.$cust_email,
        'X-Auth-Key: '.$cust_xauth,
        'Content-Type: application/json'
    ];
    $data = json_encode(array("purge_everything" => true));
    curl_setopt($ch_purge, CURLOPT_POST, true);
    curl_setopt($ch_purge, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch_purge, CURLOPT_HTTPHEADER, $headers);

    $result = json_decode(curl_exec($ch_purge),true);
    curl_close($ch_purge);

    //Tell the user if it worked
    if($result['success']==1) echo "Cloudflare Cache successfully purged! Changes should be visible right away.<br>If not try clearing your Browser Cache by pressing \"Ctrl+F5\"";
    else echo "Error purging Cloudflare Cache. Please log into Cloudflare and purge manually!";

?>

1427780cookie-checkLöschen des Cloudflare-Cache über ihre API in PHP

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy