WebsiteBaker Community Forum

WebsiteBaker Support (2.13.x) => General Help & Support => Hilfe & Support (deutsch) => Topic started by: hillschmidt on April 23, 2023, 06:21:20 PM

Title: Ausführung externer WB-Scripts (Bspl.: croncheck)
Post by: hillschmidt on April 23, 2023, 06:21:20 PM
Liebe Mit-User,

bei der Ausführung von croncheck von Dev4Me taucht seit dem neuesten Release eine Fehlermeldung auf.
Dieses Script ist für WB geschrieben. Die php Datei ist im Root einer WB Installation (siehe https://dev4me.com/modules-snippets/opensource/croncheck/ (https://dev4me.com/modules-snippets/opensource/croncheck/).

Ich nutze sowohl  die aktuelle croncheck Version als auch die WB-Version 2.13.3 r166

Die Fehlermeldung:
Code: [Select]
PHP Warning: Undefined array key "SCRIPT_NAME" in /mnt/web220/b2/93/536293/htdocs/wb/framework/CoreAutoloader.php on line 95
PHP Warning: Undefined array key "SCRIPT_NAME" in /mnt/web220/b2/93/536293/htdocs/wb/framework/CoreAutoloader.php on line 146
There was an uncatched exception<br />
strtolower(): Argument #1 ($string) must be of type string, null given<br />
in line (72) of (/framework/HttpRequester.php):<br />

Der Entwickler schrieb mir dazu:
Quote
The error is generated by the WB framework, before the croncheck is actually executed.

I guess you are calling the croncheck script directly in php, and not as http request (like wget / curl).
This WB version checks the request method ( in line (72) of (/framework/HttpRequester.php) ), but that is not existing.
Secondly, PHP8 is strict and does not allow string operations on non-existing-string (null). This is actually generating the error.

Gibt es dafür eine Lösung? Denn mit wget/curl kenne ich mich nicht aus ... Ich starte das Script über den cron Service des Providers strato.

Danke für Hinweise im Voraus, es grüßt Andreas
Title: Re: Ausführung externer WB-Scripts (Bspl.: croncheck)
Post by: dbs on April 23, 2023, 06:51:07 PM
Hallo, bei meinem Provider kann ich den cron Service auf verschiedene Arten ausführen lassen.
Eine davon ist die Datei per URL aufrufen, also http Request. Vielleicht hilft das ja schon (so wie Ruud vermutet)
Title: Re: Ausführung externer WB-Scripts (Bspl.: croncheck)
Post by: hillschmidt on April 23, 2023, 07:12:00 PM
Danke für den Tipp; bei Strato mit meinem Paket geht nur das:

Quote
In die Kommandozeile werden grundsätzlich Unix-Kommandos eingetragen, d. h. alle Kommandos und Skripte, die auch manuell aus einer SSH-Session heraus aufgerufen werden, können hier ausgeführt werden. Grundkenntnisse im Umgang mit einem Unix-System sind also zwingend erforderlich, damit Cron-Jobs einwandfrei funktionieren.

Und da bin ich nun unsicher/nicht wissend, welches Kommando außer
Code: [Select]
php -f <scriptname> ich nutzen könnte ...
Title: Re: Ausführung externer WB-Scripts (Bspl.: croncheck)
Post by: LudwigSt on April 24, 2023, 11:42:56 AM
Und da bin ich nun unsicher/nicht wissend, welches Kommando außer
Code: [Select]
php -f <scriptname> ich nutzen könnte ...

Versuche es mal mit
Code: [Select]
/bin/php -f ./PFADzurDATEI/croncheck.php
Den Pfad zu deiner Datei mußt du entsprechend setzen.

Edit: Siehe auch https://www.strato.de/faq/hosting/so-einfach-richten-sie-ihre-cron-jobs-ein/
Title: Re: Ausführung externer WB-Scripts (Bspl.: croncheck)
Post by: hillschmidt on April 24, 2023, 12:05:27 PM
genauso so nutze ich es - ich habe das Kommando im Post auf das Wesentliche verkürzt ...
Title: Re: Ausführung externer WB-Scripts (Bspl.: croncheck)
Post by: LudwigSt on April 24, 2023, 12:50:05 PM
Dann ist doch alles ok, oder gibt es damit ein Problem?
Title: Re: Ausführung externer WB-Scripts (Bspl.: croncheck)
Post by: hillschmidt on April 24, 2023, 02:10:32 PM
s.o.
Genau bei diesem Aufruf aus der Shell über Cron gibt es die oben beschriebene Fehlermeldung ... also weiterhin nicht alles ok
Title: Re: Ausführung externer WB-Scripts (Bspl.: croncheck)
Post by: DarkViper on April 24, 2023, 02:18:56 PM
Ich glaub, ich muss da kurz mal aufklären...   :wink:

Es besteht ein großer Unterschied zwischen den Aufrufen
Code: [Select]
https://example.com/croncheck.php und
Code: [Select]
php -f path/to/script/croncheck.phpIm ersten Fall wird der Webserver (z.B. Apache) aufgerufen, der das Environment aufbaut und die Request Variablen (GET/POST/etc.) einrichtet und dann z.B. über fpm-fastcgi  den PHP-Interpreter startet und diesem das Script plus das Environment übergibt. So wäre alles im grünen Bereich.

Im zweiten Fall wird per Shell direkt die ComandLineInterface-Version von PHP gestartet und die Aufrufparameter als simples Array ($args[]) übergeben. In diesem Fall fehlen z.B. das gesamte $_SERVER[] - Array und natürlich auch $_GET[] und $_POST[]. Unter diesen Bedingungen ist es WB (das auf HTTP-Requests ausgelegt ist) schlicht unmöglich, korrekt zu starten.

Lösungsmöglichkeit:  Es bräuchte einen Wrapper, der den CLI-Aufruf in einen HTTP-Request umsetzt. (also ein Script, das einen CLI-Aufruf verarbeiten und mit den Daten einen HTTP-Request auslöst.
Leider hebe ich selbst gerade null Zeit, sowas zu tippern. Aber evt. kennt sich da ja noch jemand anderes gut genug aus, und kann das übernehmen.

Manuela
Title: Re: Ausführung externer WB-Scripts (Bspl.: croncheck)
Post by: hgs on April 24, 2023, 02:52:11 PM
Frage an hillschmidt, was hindert dich daran es so wie im Beispiel zu machen?

Code: [Select]
https://example.com/croncheck.php
Ich mache das seit Jahre bei all-inkl.com genau so, wobei croncheck.php im DocRoot bei mir steht.
Title: Re: Ausführung externer WB-Scripts (Bspl.: croncheck)
Post by: DarkViper on April 24, 2023, 03:10:14 PM
Frage an hillschmidt, was hindert dich daran es so wie im Beispiel zu machen?
eventuell das Cron-Management  :wink: Der Standard-Cron, der normalerweise installiert ist, kann keine HTTP-Requests absenden, sondern nur shell scripte oder Programme aufrufen. Er kann auch mit den HTML-Antworten eines PHP-Programmes nichts anfangen.
Das Thema ist deutlich komplexer, als es auf den ersten Blick erscheint.
Title: Re: Ausführung externer WB-Scripts (Bspl.: croncheck)
Post by: LudwigSt on April 24, 2023, 03:15:59 PM
Vermutlich macht er das so, weil Ruud das so empfohlen hat. Anderenfalls muss man ja immer selber dran denken und die Datei jede Viertelstunde einmal aufrufen.

Das einzige, was das Script hindert als Cronjob zu laufen, denke ich, ist das
Code: [Select]
include('config.php'); Wenn man das entfernt und den Inhalt der config.php direkt dort rein schreibt, müsste eigentlich alles laufen. "Eigentlich", deshalb, weil ich es nicht ausprobiert habe. Ich nutze aber mehrere ähnliche PHP-Skripte, die ich via Cronjob jede Nacht laufen lasse, und alles klappt wunderbar. $_GET oder $_POST kommen im Skript nicht vor.

Mag sein, daß das nur bei Strato so geht, aber es geht.
Title: Re: Ausführung externer WB-Scripts (Bspl.: croncheck)
Post by: hillschmidt on April 24, 2023, 04:35:52 PM
Wird nicht funktionieren ... ohne
Code: [Select]
require __DIR__.'/framework/initialize.php'; läuft es nicht ... und da wird der Fehler schon generiert, wie Ruud gesagt hat.

Ansonsten nutze ich cron, um ein regelmäßiges manuelles Aufrufen des Scriptes über http zu vermeiden (wegen des Vergessens/Aufwand ... ich liebe Automatism!).
Title: Re: Ausführung externer WB-Scripts (Bspl.: croncheck)
Post by: hillschmidt on May 01, 2023, 01:54:10 PM
Leider kamen keine anderen Vorschläge - das Problem ist immer noch offen :-(
Title: Re: Ausführung externer WB-Scripts (Bspl.: croncheck)
Post by: dbs on May 05, 2023, 08:02:43 AM
Nur ein Vorschlag: https://www.cronjob.de/
Zwar extern, aber man kann eine URL angeben.
Title: Re: Ausführung externer WB-Scripts (Bspl.: croncheck)
Post by: hillschmidt on May 05, 2023, 02:29:20 PM
scheitert genauso ... das Problem ist nicht cron an sich, sondern das auszuführende Script mit seinen WB Aufrufen ohne Wrapper
Quote
der den CLI-Aufruf in einen HTTP-Request umsetzt. (also ein Script, das einen CLI-Aufruf verarbeiten und mit den Daten einen HTTP-Request auslöst.
wie DarkViper schon geschrieben hat.