include() Funktion macht Aerger

Alles, was PHP betrifft, kann hier besprochen werden.

include() Funktion macht Aerger

Postby pinpoint » 03. November 2005 08:48

Hallo. Ersteinmal ein dickes Lob and die Entwickler!

Ein Problem tut sich bei mir auf: Ich versuche eine Datei, die im DocumentRoot-Verzeichnis steckt, mit der include("$path") Funktion in eine andere einzubinden. Dabei entsteht, was immer ich auch tue, der gleiche Fehler: Der Verzeichnis-Pfad wird verstuemmelt widergegeben.

Der Fehler tritt in PHP4 und PHP5 gleichermassen auf. Ich habe schon alle Konfiguartionsdateien von PHP und Apache durchgesehen, ob irgendwo eine Variable fuer den Document Root kaputt ist, aber ich kann nichts falsches finden. Auch phpinfo() zeigt alle Verzeichnisse sauber an. Hier ist die Fehlermeldung des Scriptes:

Warning: main(C:\Program Files mpp\htdocs\include/config_inc.php): failed to open stream: Invalid argument in C:\Program Files\xampp\htdocs\index.php on line 5

Heissen muesste es fuer den Pfad: "C:\Program Files\xampp\" und nicht wie in dem Fehler ausgewiesen: "C:\Program Files mpp\". Hat jemend eine Idee wo die Verstuemmelung herstammt und warum diese ohne mein Zutun entsteht? Es wird der String "\xa" aus dem Document Root innerhalb der include() Funktion entfernt.

Vielen Dank fuer die Hilfe!
pinpoint
 
Posts: 3
Joined: 03. November 2005 08:35
Location: Wasaga Beach, Kanada

Postby Rolf Bergius » 03. November 2005 09:29

nur so einen Idee:

\x ist ein Steuerzeichen und leitet einen hexadezimalwert ein.
z. B.: \x41

mich wundert nur, dass die anderen \ korrekt erkannt werden.

Versuch mal alle \ als \\ zu maskieren.

tschau sir rolus
Die meisten Menschen haben überdurchschnittlich viele Beine.
User avatar
Rolf Bergius
 
Posts: 35
Joined: 06. August 2005 12:00
Location: 29614 Soltau

Postby nattl » 03. November 2005 11:10

warum verwendest du keine relativen pfadangaben?
User avatar
nattl
 
Posts: 22
Joined: 26. October 2005 07:50
Location: Vienna

Das hat geklappt!

Postby pinpoint » 03. November 2005 17:22

Hallo Rolf,

Dein Tip hat's gebracht. Mit doppelten Verzeichnis-Trennern funktioniert die include() -Funktion:
<?php
include("C:\\Program Files\\xampp\htdocs\include\config_inc.php")
?>


Hallo Nattl,

Das relative Verzeichnis hat nicht funktioniert. Da hat es den gleichen Fehler gegeben. Die ausgebene Warnung war, dass main(C:\Program Files mpp\htdocs\include\config_inc.php) nicht existiert, auch bei relativem Verzeichnis.

Vielen Dank fuer Eure Hilfe!
pinpoint
 
Posts: 3
Joined: 03. November 2005 08:35
Location: Wasaga Beach, Kanada

Postby nattl » 03. November 2005 20:07

supi, dass es funzt.

allerdings versteh' ich nicht, warum ein relativer pfad nicht funktionieren soll. aber egal...
User avatar
nattl
 
Posts: 22
Joined: 26. October 2005 07:50
Location: Vienna

Postby deepsurfer » 03. November 2005 20:17

nattl wrote:supi, dass es funzt.

allerdings versteh' ich nicht, warum ein relativer pfad nicht funktionieren soll. aber egal...

weil die backslashes escaped werden sollten....
der doppel-backslash ist nicht die feine english ;)
chirio Deep
Wie sagte einst der MCP aus Tron auf dem Bildschirm zu schreiben Pflegte
" ... end of communication ... "
User avatar
deepsurfer
AF Moderator
 
Posts: 6440
Joined: 23. November 2004 10:44
Location: Cologne
Operating System: Win-XP / Win7 / Linux -Debian

Escape Backslash und Unix Pfadschreibweise funzen beide

Postby pinpoint » 03. November 2005 21:29

Hi there,

Um einen Backslash zu escapen muss man einen weiteren Backslash voranstellen, richtig? Das ergibt dann den von Rolf vorgeschlagenen Doppel-Backslash. Rolfs und Deine Hilfestellung scheinen sich nicht zu widersprechen.

Was ich auch noch ausprobiert habe ist die Unix-Schreibweise fiuer den Pfad, und die funktionockelt auch:

<?php
include("C:/Program Files/xampp/htdocs/include/config_inc.php")
?>


Auch dieses Kommando wird korrekt geparst, wie ich heraus gefunden habe.

Und somit funktionieren auch Nattls indirekte Pfade, naemlich wenn man entweder jeden Backslash mit einem weiteren Backslash escaped oder die Unix Schreibweise benutzt.

Auf jeden Fall konnte ich mein Problem mit Eurer Hilfe loesen und vielleicht hift das ja auch dem/der einen oder anderen weiter.
pinpoint
 
Posts: 3
Joined: 03. November 2005 08:35
Location: Wasaga Beach, Kanada

Postby Wiedmann » 03. November 2005 21:49

Und somit funktionieren auch Nattls indirekte Pfade,

Woher willst du das wissen ohne sie zu testen?

relativ sollte es ohne Probleme tun (auch wenn den Backslah hier trotzdem Quoten sollte):
Code: Select all
include("include\config_inc.php");


Ansonsten ist es eine gute Idee, beim Programmieren immer den Slash, anstatt den Backslash, zu benutzen.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby nattl » 04. November 2005 07:47

das mit dem escapen mit \ weiss ich schon. was ich nicht versteh':

wenn ich relative pfade nehme, kann ich mir alle pfad-teile über dem htdocs-root sparen weil ich ja eine ebene zurück mit ../ gehen kann. somit komme ich auch nicht in verlegenheit, den xampp-ordner anzugeben.

wenn er von der index.php die im root liegt auf die datei config_inc.php zugreifen will und die liegt im verzeichnis include, dann müsste ein simples require_once('include/config_inc.php'); genügen. er könnte sogar auf orte, die überhalb des htdocs liegen zugreifen mit ../../../ usw.

deswegen versteh ichs nicht, warums mit relativen pfaden nicht funktioniert hat, bzw. warum der gleiche fehler aufgetreten sein soll...

Ausserdem: wenn man den Pfad anstatt mit " mit ' angibt, dann kann man sich das escapen auch sparen. Strings die unter " stehen werden nähmlich geparst, jene unter ' nicht. (php-referenz, kapitel 11: strings)
User avatar
nattl
 
Posts: 22
Joined: 26. October 2005 07:50
Location: Vienna

Postby Tach » 17. November 2005 22:36

Probiers mal so :
Code: Select all
<?php
include("file://C:/Program Files/xampp/htdocs/include/config_inc.php")
?>
Tach
 
Posts: 48
Joined: 04. November 2005 21:34


Return to PHP

Who is online

Users browsing this forum: No registered users and 45 guests