+ Antworten
Ergebnis 1 bis 3 von 3
  1. #1
    Registriert seit
    Oct 2008
    Beiträge
    1,033

    Standard include Problemchen

    Hi,

    ich will eine PHP aus einem Unterverzeichnis des Scriptverzeichnisses includen.

    Die Datei ist da und wenn ich sie direkt ins Scriptverzeichnis lege, geht auch alles. Sobald das Ding aber im Unterverzeichnis "0_Globals_Parts" liegt (Sub zu Scripts), machen mir folgende Zeilen:

    PHP-Code:
    include "0_Globals_Parts/Debug_V2-00_SetGlobalVar.php";
    include 
    38346;
    testfunctioncall); 
    Folgende Fehler:

    Warning: include(0_Globals_Parts/Debug_V2-00_SetGlobalVar.php) [function.include]: failed to open stream: No such file or directory in D:\IPS\scripts\0_Globals_Parts\Debug_V2-00_SetGlobalVar==0.php on line 3

    Warning: include() [function.include]: Failed opening '0_Globals_Parts/Debug_V2-00_SetGlobalVar.php' for inclusion (include_path='.;C:\php5\pear') in D:\IPS\scripts\0_Globals_Parts\Debug_V2-00_SetGlobalVar==0.php on line 3

    Warning: include(38346) [function.include]: failed to open stream: No such file or directory in D:\IPS\scripts\0_Globals_Parts\Debug_V2-00_SetGlobalVar==0.php on line 5

    Warning: include() [function.include]: Failed opening '38346' for inclusion (include_path='.;C:\php5\pear') in D:\IPS\scripts\0_Globals_Parts\Debug_V2-00_SetGlobalVar==0.php on line 5

    Fatal error: Call to undefined function testfunctioncall() in D:\IPS\scripts\0_Globals_Parts\Debug_V2-00_SetGlobalVar==0.php on line 7

    Dabei ist's egal, ob ich im Pfad Slash oder Backslash benutze.

    Die include 38346 habe ich nur mal so zum Test benutzt, weil ich unter diser ObjektID das script, welches includiert werden soll einwandfrei bearbeiten kann.

    Was mach ich falsch???

    Danke im voraus!
    jwka

    noch was: setze ich den gesamten Pfad incl. Laufwerk ein, so bekomme ich den Fehler:
    Warning: include(D:\IPS\scripts) [function.include]: failed to open stream: Permission denied in D:\IPS\scripts\0_Globals_Parts\Debug_V2-00_SetGlobalVar==0.php on line 3
    Geändert von jwka (18.06.10 um 22:11 Uhr) Grund: Zusatz

  2. #2
    Registriert seit
    Oct 2008
    Beiträge
    1,033

    rumfrickeln hilft ...

    Habe folgendes herausgefunden:

    Die PHP, die das include beinhaltet, liegt selbst in einem (hier demselben) Unterverzeichnis des Scriptverzeichnisses.

    Daher führt der Aufruf auch zum Fehler und der full-qualified-path läuft.

    Also hilft nur eine "back-reference" zum scriptroot plus pfad-stückchen:

    include "../subdir/file". Wird dann die PHP später bei "Aufräumarbeiten" in eine andere Ebene gelegt, läuft das Ganze natürlich wieder nicht mehr.

    UND:

    "include 12345" funzt NUR, wenn das script, das include benutzt im scriptverzeichnis liegen.

    Und auch das Beispiel bei "Vorgehensweisen" (http://www.ip-symcon.de/service/doku...erverwenden/):
    PHP-Code:
    function includeScript($scriptID)
    $s IPS_GetScript($scriptID);
     include(
    $s['ScriptFile']);

    läuft bei Nutzung von Unterverzeichnissen dann falsch wenn das script in einem unterverzeichnis liegt, weil auch der code oben einen relativen Pfad liefert.

    Hier wird dann der, der ordentlich strukturiert bestraft, weil das nur gut funzt, wenn alle Scripte im Script-Verzeichnis ohne weitere Struktur liegen.

    Gibt's IPS_GetRoot ?? Dann könnte man generell mit dem absoluten Pfad arbeiten und gut ist's.

    Oder mach ich jetzt nen gravierenden Denkfehler weils schon zu spät ist?

    jwka


    Änderung:

    Hab's gefunden: IPS_GetKernelDir() . "scripts/"

    Das Beispiel sollte dann so heissen:

    PHP-Code:
    function includeScript($scriptID)
    $s IPS_GetScript($scriptID);
     
    $fullfilepath IPS_GetKernelDir() . "scripts/" $s['ScriptFile'];
     include(
    $fullfilepath);





    $includefile="0_Globals_Parts/Debug_V2-00_SetGlobalVar.php";

    include( $fullpathfile);



    function includeScript($scriptID)
    { $s = IPS_GetScript($scriptID);
    include($s['ScriptFile']);
    }
    Geändert von jwka (18.06.10 um 23:06 Uhr)

  3. #3
    Registriert seit
    May 2005
    Beiträge
    2,279

    Die relativen Pfade beziehen sich auf das ausführende Programm, also die Position von IPS.EXE, und nicht auf die Position des aufgerufenen Scriptes.
    Tommi

Ähnliche Themen

  1. Return und Include vertragen sich nicht ?
    Von Rubberduck im Forum Skripte, PHP, SQL
    Antworten: 4
    Letzter Beitrag: 07.02.10, 22:26
  2. Antworten: 7
    Letzter Beitrag: 24.09.09, 22:42
  3. Problem mit array per include
    Von chriszero im Forum Skripte, PHP, SQL
    Antworten: 4
    Letzter Beitrag: 14.08.09, 05:46
  4. include
    Von mistljo im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 1
    Letzter Beitrag: 19.07.08, 12:16
  5. Fehler beim include Befehl
    Von Ferengi-Master im Forum Skripte, PHP, SQL
    Antworten: 4
    Letzter Beitrag: 13.03.07, 15:13