0

Skript beim Start soll pro Eintrag eine GET-Abfrage machen

Hallo zusammen

 

Ich habe eine Datenbank meiner Kunden, deren Webseite ich betreue. Nun habe ich pro Webseite einen Eintrag in der Tabelle Kunde (und noch viele weitere Tabellen, die für mein Problem nicht relevant sind). Darin habe ich unter anderem zwei Felder, welche die installierte Version ihres Systems (aktuelle WordPress Version) und die PHP-Version (PHP Version Hoster) des Hosters beinhalten.

Die aktuelle Version von WordPress frage ich derzeit manuell mit einem Button ab und schreibe dies in meine Tabelle Einstellung:

let wp_version := http("GET", "https://api.wordpress.org/core/version-check/1.7/");
if wp_version.error then
   alert(text("Irgendetwas ist schief gelaufen."))
else
   'abgefragte WordPress Version' := text(wp_version.result.first(offes).current)
end

Das funktoniert auch wunderbar. Dieses Feld lasse ich dann eben bei allen Kunden anzeigen. Von WordPress gibt es eben nur eine aktuelle Version. Diese vegleiche ich mit der (manuell eingetragenen) Version, die jeder Kunde installiert hat.

 

Nun möchte ich auch gerne pro Kunde abfragen, welche PHP-Version beim Hoster installiert ist. Dazu lege ich bei jedem Kunden eine Datei namens phpversion.php ab. Die hat den Inhalt:

<?php
echo phpversion();
?>

Beim Aufruf dieser Datei, bekomme ich z.B. 7.2.24 im Browser zurück.

Nun konkret:

Ich möchte gerne beim Aufruf meiner Datenbank, dass automatisch ein Skript ausgeführt wird, welches mir die WordPress Version abfragt und in die Tabelle Einstellung in ein Feld schreibt.

Zusätzlich soll in der Tabelle Kunde jeder Eintrag einmal abgearbeitet werden und die Datei phpversion.php mit der jeweiligen vorangestellten URL (welche natürlich in der Tabelle Kunde steht) abfragen und deren Inhalt beim jeweiligen Kunden in ein Feld PHP Version Hoster schreibt.

Beispiel:
Kunde A hat die URL https://www.kunde-a.de

Kunde B die URL https://www.kunde-b.com

Die stehen im Feld URL des Kunden. Nun soll nacheinander von allen Kunden immer URL des Kunden/phpversion.php aufgerufen werden und der Inhalt ausgelesen werden.

Ist dies möglich?

11 Antworten

null
    • Torsten_Stang.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Marc,

     

    etwas ähnliches habe ich auch, an Dein Anforderung angepasst könnte das so aussehen:

     

    for i in select Kunde where URL do
       let myURL := URL+"/phpversion.php";
       let repsonse := http("GET", myURL);
       if not response.error then
          i.'PHP-Version':=text(response.result)
       end
    end

     

    'PHP-Version' ist im Zweifel durch den Namen des Feldes zu ersetzen, in welches Du die Version schreiben willst. Das Script in den DB-Optionen unter "nach dem Öffnen der Datenbank folgendes Skript ausführen" platzieren.

     

    lg, Torsten

    • Marc.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Wenn ich das so lese, kommt mir das plausibel vor.

    Nun habe ich mal eine Testdatenbank aufgebaut und das Skript in die Console eingetragen und bekomme folgende Fehlermeldung:

    Eine Tabellenspalte wurde nicht gefunden. URL in Zeile 2, Spalte 19

    Es scheint am URL+"/phpversion.php" etwas fehlerhaft zu sein. Aber da stimmt doch alles, oder?

    • Torsten_Stang.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hi Marc,

     

    ich habe im Code vorausgesetzt, dass das Feld in der Tabelle Kunden, welches die URL enthält, auch so heißt - wenn dem nicht so ist, solltest Du das im Code entsprechend anpassen. Sorry, hatte ich versäumt zu ergänzen.

     

    lg, Torsten

    • Marc.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hi Torsten

     

    Ich habe extra eine neue Datenbank zum Testen erstellt. Die Tabelle heisst natürich "Kunde". Und das entsprechende Feld darin lautet "URL".

    Heute Abend lade ich die Datenbank mal irgendwo hoch. Achso, keine Ahnung, ob das wichtig ist: es geht um die Mac-App.

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Wenn's hilft: in der Schleife muss auch ein Verweis auf aktiellen Schleifendatensatz erfolgen (also auf "i"-i.URL statt URL). Und ich würde den responce sicherheitshalber als server laufen lassen;

    ---

    for i in select Kunde where URL do
       let myURL := i.URL+"/phpversion.php";
       let repsonse :=do as server http("GET", myURL) end;
       if not response.error then
          i.'PHP-Version':=text(response.result)
       end
    end

    ---

    Leo

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ach so: http("GET", myURL,"","")

    Weil das Protokoll auch Header und Body fordert.

    • Torsten_Stang.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hi Marc,

     

    Test-Datenbank-Upload klingt gut - bitte auch mit valider URL füllen. Ich schau's mir dann an...

     

    lg, Torsten

    • Torsten_Stang.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Örgs,

     

    i.URL - klar, das hab ich übersehen - sorry.

     

    Was Header und Body angeht: Hat bei meinen Anwendungen immer ohne geklappt, schadet aber natürlich auch nicht.

     

    lg, Torsten

    • Marc.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ich habe meine Test-Datenbank mal hier hochgeladen: Drei URL-Einträge. Der erste ist valid, die anderen zwei fiktiv.

     

    https://cl.ly/6dd7f9d15724

    • Torsten_Stang.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hi Marc,

     

    https://www.dropbox.com/s/c614pkhfo17v9qb/Test-Abfrage.ninox?dl=0

     

    Den Code aus dem Button kannst Du, wie oben bereits erwähnt, auch unter "nach dem Öffnen der Datenbank folgendes Skript ausführen" unterbringen. Die URL-Einträge sollten generell erreichbar sein, so dass zumindest bei fehlender phpversion.php ein "404 not found" zurück kommt. Ist die Domain ansich nicht erreichbar, wird das Skript einiges an Geduld erfordern, bis es fertig ist (wie bei https://nichts.com).

     

    lg, Torsten

    • Marc.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Danke Torsten. Nun klappt es, wie gewünscht. Für die Nachwelt hier das funktionierede Skript:

     

    for i in select Kunde do
      let myURL := i.URL + "/phpversion.php";
      let response := do as server
         http("GET", myURL, "", "")
      end;
      if not response.error then
        i.('PHP-Version' := text(response.result))
      end
    end

     

    Um natürlich unangenehmes abzufangen, werden ich einen Schalter pro Kunde einbauen Ist phpverion.php überhaupt vorhanden.

     

    Und wenn mir jeder Aufruf doch zu lange dauert (keine AHnung, wie schnell das bei 30 URL abgefragt wird), werde ich doch einen Button in die Tabelle Einstellungen erstellen.

     

    Danke nochmals für die Hilfe

Content aside

  • vor 4 JahrenZuletzt aktiv
  • 11Antworten
  • 3909Ansichten