Include: Andere Architektur -> Problem

Liebe Leute,
Ich habe eine datei top.php, die von diversen Dateien in diversen Ordnern und Unterordnern eingebunden wird. Top.php verweist ihrerseits auf sqllogin.php, die im Ordner /php/ liegt.
Damit top.php sqllogin.php findet, verwende ich:

include($\_SERVER["DOCUMENT\_ROOT"]."/php/sqllogin.php");

Das funktioniert auf localhost wunderbar. Leider aber will das der Zeilserver nicht akzeptieren, da seine Architektur anders ist (es erscheint eine Fehlermeldung, dass /web/aohaewr29w8hWAS-WEISS-ICH-DINGS-ZEUGS/php/sqllogin.php nicht gefunden wurde.
Die Variable $_SERVER[‚HTTP_HOST‘] funktioniert auf dem Server, leider funktioniert include aber weder lokal noch auf dem Server, wenn ich DOCUMENT_ROOT durch HTTP_HOST ersetze.
Ich habe keinen Zugriff auf die Serverkonfiguration.
Was kann ich tun, damit das include auf beiden Architekturen funktioniert?
lg
Kalsan

Guten Tag,

ich kann mir nicht vorstellen das der root-path falsch ist. Anonsten versuch dir per var_dump($_SERVER[DOCUMENT_ROOT]) mal den Pfad auszugeben zu lassen, vllt stimmt da bei dem Server was nicht.
Ansonsten einfach mal auf den root-path verzichten und einfach include ‚/ordner/file.php‘ versuchen!
Meine Empfehlung liegt beim test auf require, denn include wirft nur eine Warnung, wÀhrendessen require einen Fatal wirft !

PS:
Die HTTP_HOST enthÀlt folgendes: (aus dem Manual)
EnthÀlt den Inhalt des Host:-Headers des aktuellen Requests, sofern ein solcher gesendet wurde.
Diesen Wert brauchst du beim Include nicht.
Gruß

Moin,

include($_SERVER[„DOCUMENT_ROOT“]."/php/sqllogin.php");

Das funktioniert auf localhost wunderbar.

Das funktioniert normalerweise immer und ĂŒberall.
Das kann ja nur dann Probleme geben, wenn $_SERVER[„DOCUMENT_ROOT“] nicht (richtig) gesetzt ist.

Leider aber will das
der Zeilserver nicht akzeptieren, da seine Architektur anders
ist

Das hat mit der Architektur nichts zu tun.

es erscheint eine Fehlermeldung, dass
/web/aohaewr29w8hWAS-WEISS-ICH-DINGS-ZEUGS/php/sqllogin.php
nicht gefunden wurde.

Dann ĂŒberprĂŒfe mal, welchen DocumentRoot-Pfad Dir Dein Provider nennt mit dem, der da in der Fehlermeldung steht. Den Pfad zum DocumentRoot stellt Dir Dein Provider normalerweise zur VerfĂŒgung, vielleicht in einer FAQ.

Möglicherweise hast Du aber Deine Dateien auch an die falsche Stelle hochgeladen. ÜberprĂŒfe das in Deinem FTP-Programm.

Die Variable $_SERVER[‚HTTP_HOST‘] funktioniert auf dem
Server

Hat aber gar nichts mit Deinem Problem zu tun.

leider funktioniert include aber weder lokal noch auf
dem Server, wenn ich DOCUMENT_ROOT durch HTTP_HOST ersetze.

Weil HTTP_HOST auch nichts mit dem lokalen Filesystem des jeweiligen Servers zu tun hat. Das ist so, wie wenn Du Dich wunderst, dass Du Dein Auto nicht mit einem Dosenöffner öffnen kannst.

Ich habe keinen Zugriff auf die Serverkonfiguration.

Aber kannst sie Dir anzeigen lassen.
Entweder durch Infos vom Provider oder z.B. auch durch phpinfo(), was alle gesetzten Variablen, auch Servervariablen, auflistet.

Was kann ich tun, damit das include auf beiden Architekturen
funktioniert?

NachprĂŒfen, wo die Diskrepanz liegt und dann entweder Deinen Fehler korrigieren oder den Provider mit seinem Fehler konfrontieren (hĂ€ssliches Wort, aber man kann das natĂŒrlich auch freundlich machen :smile:.

Liebe GrĂŒĂŸe,
-Efchen

ich kann mir nicht vorstellen das der root-path falsch ist.
Anonsten versuch dir per var_dump($_SERVER[DOCUMENT_ROOT]) mal
den Pfad auszugeben zu lassen, vllt stimmt da bei dem Server
was nicht.

vardump gibt /home/www/6db76ea02a5e9d6c6bcb340f74ff4021/web zurĂŒck. Dieser Ordner ist beim Includen aber ungĂŒltig.

Ansonsten einfach mal auf den root-path verzichten und einfach
include ‚/ordner/file.php‘ versuchen!

Geht nicht '-(
lg
Kalsan

Tja, der Server ist seit Jahren schlecht konfiguriert und wir haben stĂ€ndig Probleme damit. Da es sich aber um einen Schulserver handelt, der von einer Firma monopolartig und aus meiner Sicht mies verwaltet wird, kann das Problem aus organisatorischen GrĂŒnden und aufgrund der ineffizienten Struktur bezĂŒglich des Informatikwesens der Institution nur ĂŒber viele Umwege gelöst werden.
Kurz, wenn ich die um Hilfe frage, dauert das womöglich Jahrhunderte

Gibt es den keine Möglichkeit, wie ich das selber lösen könnte?
lg
Kalsan

Guten Tag,

am Besten du Kontaktierst deinen Anbieter oder du suchst dir einen der es schafft die php includes richtig zu setzen. Alternative wĂ€re du findest ĂŒrgendwie herraus wie der korrekte Pfad lautet. Eine andere möglichkeit sehe ich im Moment nicht.

Gruß

1 Like

Alternative wĂ€re du findest ĂŒrgendwie herraus wie der
korrekte Pfad lautet.

Wie wĂŒrde das gehen?
lg
Kalsan

Guten Tag,

steht alles im Manual, aber ich wĂŒrde dir das hier raten
bis V 5.3.0:
include dirname(__FILE__).’/datei.php’;

ab V 5.3.0:

include __DIR__.’/datei.php’;

Gruß

bis V 5.3.0:
include dirname(__FILE__).’/datei.php’;

Warning: include(/home/www/6db76ea02a5e9d6c6bcb340f74ff4021/web/creusex/private/php/sqllogin.php) [function.include]: failed to open stream: No such file or directory in /home/www/6db76ea02a5e9d6c6bcb340f74ff4021/web/creusex/private/left.php on line 11

ab V 5.3.0:
include __DIR__.’/datei.php’;

Warning: include(__DIR__/php/sqllogin.php) [function.include]: failed to open stream: No such file or directory in /home/www/6db76ea02a5e9d6c6bcb340f74ff4021/web/creusex/private/left.php on line 11

Gruß

lg

Moin,

Ansonsten einfach mal auf den root-path verzichten und einfach
include ‚/ordner/file.php‘ versuchen!

Geht nicht '-(

Das ist auch extrem unwahrscheinlich, dass das geht, denn das Root-Verzeichnis des Web-Servers wird in so ziemlich keinem Falle jemals mit dem Root-Verzeichnis des Computers ĂŒberein stimmen.

Mit getcwd() kannst Du Dir das Verzeichnis anzeigen lassen, in dem Dein aktuelles Script steht.
http://de.php.net/manual/de/function.getcwd.php

Dann weißt Du den Pfad.

Ansonsten kannst Du include() auch mit relativen Pfaden benutzen, es muss ja nicht absolut sein!

GrĂŒĂŸe,
-Efchen

SalĂŒ Efchen,
leider hat getcwd() das selbe Problem wie relative Pfade: Da top.php und left.php ihrerseits von anderen Dateien eingebunden werden, Ă€ndern sich ihr Standort. Zum Beispiel, bei der Startseite gibt getcwd() /opt/lampp/htdocs/private zurĂŒck. Gehe ich dann ins Forum, so lautet die Ausgabe: /opt/lampp/htdocs/private/forum

/php/sqllogin fĂŒhrt also bei ersterem zum Erfolg, scheitert jedoch beim zweiten.
lg
Kalsan

SalĂŒ Efchen,
leider hat getcwd() das selbe Problem wie relative Pfade: Da
top.php und left.php ihrerseits von anderen Dateien
eingebunden werden, Àndern sich ihr Standort. Zum Beispiel,
bei der Startseite gibt getcwd() /opt/lampp/htdocs/private
zurĂŒck. Gehe ich dann ins Forum, so lautet die Ausgabe:
/opt/lampp/htdocs/private/forum

/php/sqllogin fĂŒhrt also bei ersterem zum Erfolg, scheitert
jedoch beim zweiten.

vermutlich hilft die __FILE__ weiter. damit kannst du von der aktuellen datei aus weiterrechnen.
http://php.net/manual/de/language.constants.predefin


1 Like

Moin,

leider hat getcwd() das selbe Problem wie relative Pfade:

ann ĂŒberdenke doch mal Deine Seitenstruktur.
Wenn es nicht möglich ist, dass der Server richtig konfiguriert wird, dann musst Du halt Deine Seiten auf die Probleme hin anpassen. Das allereinfachste, was auf jeden Fall funktionieren sollte (aber auch nicht wirklich schön ist), wÀre alle Dateien im selben Verzeichnis abzulegen. Es gibt aber auch sicher eine Möglichkeit, Deine Dateien so abzulegen, dass relative Pfade anwendbar sind.
Ich nehme an, Du hast auch keinen Direktzugriff (Shell) auf den Server-Rechner? Dann könntest Du ggfs. auch Links (das ist so Ă€hnlich wie VerknĂŒpfungen unter Windows, nur viel besser) anlegen.

Die andere Alternative wÀre ein gescheiter Provider/Webspace.

Liebe GrĂŒĂŸe,
-Efchen

P.S.: Lösungen wurden jetzt eine ganze Menge aufgezeigt. Immer nur „das geht nicht“ oder „Kann ich nicht machen“ - damit ist Dir am allerwenigsten geholfen. Wenn das etwas fĂŒr die Schule ist, dann muss die Schule halt mal aktiv werden oder aber das Projekt wird sterben. Die Zeit, die Du da schon investiert hast, rumzudoktorn, wĂŒrde bei bezahlten Menschen teurer sein, als ein paar Jahre normaler Webspace bei einem anstĂ€ndigen Provider.

1 Like

Das allereinfachste, was auf jeden Fall
funktionieren sollte (aber auch nicht wirklich schön ist),
wÀre alle Dateien im selben Verzeichnis abzulegen. Es gibt
aber auch sicher eine Möglichkeit, Deine Dateien so abzulegen,
dass relative Pfade anwendbar sind.

Bei 128 Dateien in 13 Unterordnern, von denen 7 eine identische Unterstruktur haben, absolut unmöglich


Ich nehme an, Du hast auch keinen Direktzugriff (Shell) auf
den Server-Rechner? Dann könntest Du ggfs. auch Links (das ist
so Ă€hnlich wie VerknĂŒpfungen unter Windows, nur viel besser)
anlegen.

Leider nicht.

Die andere Alternative wÀre ein gescheiter Provider/Webspace.

Geht auch nicht, das ist eine Maturaarbeit und die sollte falls irgendwie möglich auf den Schulserver.

P.S.: Lösungen wurden jetzt eine ganze Menge aufgezeigt. Immer
nur „das geht nicht“ oder „Kann ich nicht machen“ - damit ist
Dir am allerwenigsten geholfen. Wenn das etwas fĂŒr die Schule
ist, dann muss die Schule halt mal aktiv werden oder aber das
Projekt wird sterben. Die Zeit, die Du da schon investiert
hast, rumzudoktorn, wĂŒrde bei bezahlten Menschen teurer sein,
als ein paar Jahre normaler Webspace bei einem anstÀndigen
Provider.

Haha, da hast du recht :smile:
Ich werde Folgendes tun: „Hilf dir selbst, dann hilft dir Gott“ - auch als nicht gottesfĂŒrchtiger Mensch mag ich dieses Sprichwort sehr und probiere daher erst mal selber klar zu kommen. Zwei Möglichkeiten sind mir noch offen:

  • __FILE__ ausprobieren
  • getcwd() und dann per Zusatzfunktion alles hinter private/ aus dem String wegzuschnipseln
    Wenn diese Versuche auch noch scheitern, so werde ich klÀglich und hoffnungslos verzweifelt an meinen Provider wenden :wink:
    Vielen Dank fĂŒr eure Hilfe!
    lg
    Kalsan

TatsĂ€chlich: Die Lösung lautet: include dirname(__FILE__)."/
/php/sqllogin.php";
Das hab ich zwar schon mal probiert, aber vermutlich falsch eingetippt
 dein Link hat mir geholfen. Herzlichen Dank!
lg
Kalsan

Moin,

Das allereinfachste wÀre alle Dateien im selben
Verzeichnis abzulegen.

Bei 128 Dateien in 13 Unterordnern, von denen 7 eine
identische Unterstruktur haben, absolut unmöglich


Da sehe ich nichts Unmögliches. Es ist höchstens aufwĂ€ndig, vielleicht sogar anstrengend. Aber wenn alle anderen Optionen versagen


Die andere Alternative wÀre ein gescheiter Provider/Webspace.

Geht auch nicht, das ist eine Maturaarbeit und die sollte
falls irgendwie möglich auf den Schulserver.

Ich meinte auch ein gescheiter Provider fĂŒr die Schulwebsite. Wenn der Server nicht richtig gepflegt wird, ist er unbenutzbar. Und entweder die Verantwortlichen Ă€ndern diesen Zustand (indem sie ihn richtig pflegen lassen oder indem sie auf einen anderen Webspace umziehen) oder aber die Arbeit kommt halt nicht auf den Schulserver (Du schriebst „falls irgendwie möglich“ - mein GefĂŒhl sagt mir, dass wir vielleicht noch nicht gegen die Wand rennen, sie aber schon zum Greifen nahe ist) oder auf einen eigenen Server.

Vielen Dank fĂŒr eure Hilfe!

Gerne. Hoffentlich kommst Du zu einem anstÀndigen Ergebnis.

Liebe GrĂŒĂŸe,
-Efchen

Es hat tatsÀchlich geklappt :smile:
include dirname(__FILE__)."/
/php/sqllogin.php";

schreib dir mal eine kurze php datei mit
echo phpinfo();

Vielleicht findest du darin Hinweise, wie der korrekte Pfad lauten mĂŒsste. Ich denke dein /web/xyz
 ist eine changeroot Umgebung.

Vielleicht muss davor noch sowas wie /var/www/ ect.

Vielen Dank fĂŒr deine Antwort. Das Problem ist mittlerweile gelöst:
include dirname(__FILE__)."/
/php/sqllogin.php";