# Unterskripte erkennen

**URL:** <https://community.symcon.de/t/unterskripte-erkennen/136871>\
**Category:** Skripte, PHP, SQL (Anleitungen)\
**Created:** [14. März 2024 um 07:21 UTC](https://community.symcon.de/t/unterskripte-erkennen/136871 "2024-03-14T07:21:22Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![jagu](https://community.symcon.de/letter_avatar_proxy/v4/letter/j/35a633/32.png) [@jagu](https://community.symcon.de/u/jagu)\
**Post date:** [14. März 2024 um 07:21 UTC](https://community.symcon.de/t/unterskripte-erkennen/136871/1 "2024-03-14T07:21:22Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![ralf](https://community.symcon.de/user_avatar/community.symcon.de/ralf/32/93_2.png) [@ralf](https://community.symcon.de/u/ralf)\
**Post date:** [14. März 2024 um 07:43 UTC](https://community.symcon.de/t/unterskripte-erkennen/136871/2 "2024-03-14T07:43:51Z")

</div>

> [@jagu](#):
>
> Beim direkt starten

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

---

<div class="post-metadata">

**Author:** ![jagu](https://community.symcon.de/letter_avatar_proxy/v4/letter/j/35a633/32.png) [@jagu](https://community.symcon.de/u/jagu)\
**Post date:** [14. März 2024 um 07:46 UTC](https://community.symcon.de/t/unterskripte-erkennen/136871/3 "2024-03-14T07:46:17Z")

</div>

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- 🙂

---

<div class="post-metadata">

**Author:** ![ralf](https://community.symcon.de/user_avatar/community.symcon.de/ralf/32/93_2.png) [@ralf](https://community.symcon.de/u/ralf)\
**Post date:** [14. März 2024 um 07:57 UTC](https://community.symcon.de/t/unterskripte-erkennen/136871/4 "2024-03-14T07:57:53Z")

</div>

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

```

sollte funktionieren.

---

<div class="post-metadata">

**Author:** ![pitti](https://community.symcon.de/user_avatar/community.symcon.de/pitti/32/78081_2.png) [@pitti](https://community.symcon.de/u/pitti)\
**Post date:** [14. März 2024 um 08:07 UTC](https://community.symcon.de/t/unterskripte-erkennen/136871/5 "2024-03-14T08:07:03Z")

</div>

Ralf hat ja schon eine Lösung gezeigt!

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

IM HAUPTSCRIPT

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

```

IM UNTERSCRIPT

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

```

Gruß Heiko

---

<div class="post-metadata">

**Author:** ![jagu](https://community.symcon.de/letter_avatar_proxy/v4/letter/j/35a633/32.png) [@jagu](https://community.symcon.de/u/jagu)\
**Post date:** [14. März 2024 um 08:15 UTC](https://community.symcon.de/t/unterskripte-erkennen/136871/6 "2024-03-14T08:15:57Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![pitti](https://community.symcon.de/user_avatar/community.symcon.de/pitti/32/78081_2.png) [@pitti](https://community.symcon.de/u/pitti)\
**Post date:** [14. März 2024 um 08:21 UTC](https://community.symcon.de/t/unterskripte-erkennen/136871/7 "2024-03-14T08:21:46Z")

</div>

Haha, da hat Ralf einen kleinen Klammerfehler 🙂

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

```

Ohne geschweifte Klammer wird das Return immer ausgeführt!

---

<div class="post-metadata">

**Author:** ![ralf](https://community.symcon.de/user_avatar/community.symcon.de/ralf/32/93_2.png) [@ralf](https://community.symcon.de/u/ralf)\
**Post date:** [14. März 2024 um 08:25 UTC](https://community.symcon.de/t/unterskripte-erkennen/136871/8 "2024-03-14T08:25:05Z")

</div>

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

Eigentlich war es nur

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

```

und das funktioniert 🙂

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

---

<div class="post-metadata">

**Author:** ![jagu](https://community.symcon.de/letter_avatar_proxy/v4/letter/j/35a633/32.png) [@jagu](https://community.symcon.de/u/jagu)\
**Post date:** [14. März 2024 um 08:27 UTC](https://community.symcon.de/t/unterskripte-erkennen/136871/9 "2024-03-14T08:27:07Z")

</div>

> [@pitti](#):
>
> ```auto
> if ($_IPS['SENDER'] == "Execute") {
> echo "Kann man nicht direkt aufrufen!";
> return;
> }
> 
> ```

macht leider keinen Unterschied

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

Gruß

Oliver

---

<div class="post-metadata">

**Author:** ![Nall-chan](https://community.symcon.de/user_avatar/community.symcon.de/nall-chan/32/18_2.png) [@Nall-chan](https://community.symcon.de/u/Nall-chan)\
**Post date:** [14. März 2024 um 08:45 UTC](https://community.symcon.de/t/unterskripte-erkennen/136871/10 "2024-03-14T08:45:03Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![ralf](https://community.symcon.de/user_avatar/community.symcon.de/ralf/32/93_2.png) [@ralf](https://community.symcon.de/u/ralf)\
**Post date:** [14. März 2024 um 08:57 UTC](https://community.symcon.de/t/unterskripte-erkennen/136871/11 "2024-03-14T08:57:02Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![Nall-chan](https://community.symcon.de/user_avatar/community.symcon.de/nall-chan/32/18_2.png) [@Nall-chan](https://community.symcon.de/u/Nall-chan)\
**Post date:** [14. März 2024 um 11:19 UTC](https://community.symcon.de/t/unterskripte-erkennen/136871/12 "2024-03-14T11:19:08Z")

</div>

$\_IPS ist eine Superglobal, somit gilt die in allen Scripten 🙂  
Michael

---

<div class="post-metadata">

**Author:** ![cebra](https://community.symcon.de/user_avatar/community.symcon.de/cebra/32/205_2.png) [@cebra](https://community.symcon.de/u/cebra)\
**Post date:** [15. März 2024 um 17:37 UTC](https://community.symcon.de/t/unterskripte-erkennen/136871/13 "2024-03-15T17:37:06Z")

</div>

```auto
$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.
