Unterskripte erkennen

Hallo,

ich rufe aus einem Skript ein Unterskript mit Require auf. kann ich im Unterskript was einbauen, dass es nicht direkt ausgeführt werden kann, also nur läuft, wenn es z.B. mit Require aufgerufen wurde?

Beim direkt starten macht es „Blödsinn“, weil es da andere Idents findet.

Gruß

Oliver

Warum, wodurch, durch wen würde es denn direkt gestartet?

leider durch die Dummheit vor dem Bildschirm.

ist mir schon ein paar mal passiert, das ich ein zentrales Skript anpassen musste und dann auf ausführen gedrückt hab. Daher würde ich da gerne was einbauen, dass es nur eine Nachricht ausgibt- :slight_smile:

if ($_IPS['SENDER'] == "Execute") 
   echo "Kann man nicht direkt aufrufen!";
return;

sollte funktionieren.

Ralf hat ja schon eine Lösung gezeigt!

Man kann das natürlich auch noch etwas anders machen …

IM HAUPTSCRIPT

// Define Project Name
define('API_PROJECT', true);

IM UNTERSCRIPT

// data.php
defined('API_PROJECT') || die("No direct access allowed!");

Gruß Heiko

1 „Gefällt mir“

Hallo, danke euch.

die Variante von Ralf hat leider nicht funktioniert, da kam immer „Kann man nicht direkt aufrufen!“, egal ob direkt oder aus anderem Skript aufgerufen.

Define Project name hat funktioniert und werde ich in meine Skripte einbauen

danke

Oliver

Haha, da hat Ralf einen kleinen Klammerfehler :slight_smile:

if ($_IPS['SENDER'] == "Execute") {
   echo "Kann man nicht direkt aufrufen!";
   return;
}

Ohne geschweifte Klammer wird das Return immer ausgeführt!

stimmt, ich hatte das „Meldung ausgeben“ zu spät wahrgenommen und das echo ergänzt.

Eigentlich war es nur

if ($_IPS['SENDER'] == "Execute") return;

und das funktioniert :slight_smile:

Nutze ich auch häufiger, gerade um beim Manuellen Auslösen nicht rigendwelche Timer-gesteuerten Mechanismen/Logging/… zu verwirren.

macht leider keinen Unterschied

mit == kommt immer „Kann man nicht direkt aufrufen!“
mit != kommt immer „ich wurde richtig aufgerufen!“

Gruß

Oliver

Das hat aber nix mit require zu tun, sondern prüft nur ob du das Script per Ausführen gestartet hast.
Michael

Das ist schon klar, ich hätte erwartet, dass das für das Masterscript gilt und nicht für den Include/Require… Teil.

Ok, dann geht es so wohl nicht.

$_IPS ist eine Superglobal, somit gilt die in allen Scripten :slight_smile:
Michael

$script_dir = IPS_GetKernelDir() . '/scripts/';
$include_file_script_id = @IPS_GetScriptIDByFile(substr(__FILE__, strlen($script_dir) - 1));
if($include_file_script_id === false || $include_file_script_id == 0) {
    die("Script ID of include file could not be determined!");
}
if($include_file_script_id == $_IPS['SELF']) {
    die("Include script can not be called directly!");
}

Funktioniert nur, wenn das Includescript auch einem Skriptobjekt zugewiesen ist.