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
-
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
-
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?
-
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
-
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.
-
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
-
Ach so: http("GET", myURL,"","")
Weil das Protokoll auch Header und Body fordert.
-
Hi Marc,
Test-Datenbank-Upload klingt gut - bitte auch mit valider URL füllen. Ich schau's mir dann an...
lg, Torsten
-
Ö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
-
Ich habe meine Test-Datenbank mal hier hochgeladen: Drei URL-Einträge. Der erste ist valid, die anderen zwei fiktiv.
-
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
-
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 5 JahrenZuletzt aktiv
- 11Antworten
- 3913Ansichten