Links mit fehlendem Slash

Fragen zur Implementierung und/oder Anpassung von ConPresso 4 werden in diesem Forum diskutiert.
Antworten
msto
ConPresso-Newbie
Beiträge: 7
Registriert: 26.12.2005 15:35
Hat sich bedankt: 2 Mal

Links mit fehlendem Slash

Beitrag von msto »

Hallo,

ich habe eine funktionierende Version von ConPresso auf einen Zweitserver kopiert um einige Aenderungen zu testen, ohne auf dem echten System zu arbeiten. Nun werden jedoch alle Links, welche durch ConPresso ausgegeben werden, falsch generiert, d.h.

- ConPresso liegt beispielsweise im D:\testing\, wobei D:\ der DocRoot ist.
- Alle Links werden als http://localhosttesting/ angezeigt, i.e. der Slash zwischen dem Server und dem ersten Verzeichnis fehlt.

Hatte jemand auch aehnliche Probleme/Vorschlaege?

Besten Dank,

msto.
Benutzeravatar
balu
ConPresso-Entwickler
Beiträge: 1748
Registriert: 01.01.1970 01:00
Hat sich bedankt: 81 Mal
Danksagung erhalten: 133 Mal

Beitrag von balu »

Hallo,

hast Du schon mal geschaut, wie die Einstellung fuer die "Basis-URL:" in den Systemeinstellungen ist?

Balu
msto
ConPresso-Newbie
Beiträge: 7
Registriert: 26.12.2005 15:35
Hat sich bedankt: 2 Mal

Beitrag von msto »

Hallo,

der "Basis-URL:" ist richtig eingestellt, i.e. http://localhost/testing/.

Ich habe jedoch den Grund gefunden, in dem ich das Include common.inc.php ein wenig analysiert habe. Dort wird ja in den Zeilen 208ff. die Variable $auto_base_url aufgebaut. Nun bis vor die Zeile(n)

Code: Alles auswählen

$auto_base_url .= substr(str_replace('\\', '/', __FILE__),  
                    strlen(str_replace('\\', '/', realpath($DOCROOT))), 
                    -strlen('_include/2common.inc.php'));
scheint alles in Ordnung. Innerhalb dieser Zeile sind meiner Meinung nach einige Elemente ein wenig komisch: weshalb wird "...2common.inc.php" entfernt und nicht "...common.inc.php" -- weshalb die 2? Wegen dem trailing Slash? Zusaetzlich stiehlt strlen(...$DOCROOT...) ein Slash zu viel, i.e. das leading Slash zwischen Host (und Port) und Directory.

Ich habe das bei mir mal mit dem folgenden Workaround gefixt:

Code: Alles auswählen

$auto_base_url .= '/' . substr(str_replace('\\', '/', __FILE__),  
                    strlen(str_replace('\\', '/', realpath($DOCROOT))), 
                    -strlen('_include/2common.inc.php'));
Habe ich was uebersehen oder woher kommt das Problem?

Besten Dank,

Marc.
Benutzeravatar
balu
ConPresso-Entwickler
Beiträge: 1748
Registriert: 01.01.1970 01:00
Hat sich bedankt: 81 Mal
Danksagung erhalten: 133 Mal

Beitrag von balu »

Hi,

der Abschnitt ist nicht ganz so einfach zu durchschauen, da muss ich glaube ich mal ein paar Kommentare einfuegen :-).

Die 2 ist Programmiererfaulheit, damit der endende / entfernt wird. Ich haette dort auch -strlen('_include/common.inc.php')-1 schreiben koennen, um denselben Effekt zu erhalten.

Wieso bei Dir strlen(...$DOCROOT...) den fuehrenden Slash zuviel abzieht, komme ich im Moment nicht. Das klappt bei allen bisherigen Installationen jedenfalls recht gut.

Wenn Du im System oder bei der Installation die Basis-URL angegeben haettest, duerfte das Problem jedenfalls garnicht auftreten, da in diesem Fall der von Dir angegebene String benutzt werden wuerde.

Die automatische Basis-URL (die in den Systemeinstellungen angezeigt wird, damit ihr sie kontrollieren koennt) muesste bei Dir dann ebenfalls inkorrekt da stehen?

Du koenntest mal vor dem "2common"-Abschnitt das folgende ergaenzen und mir die Ausgabe schicken - dann faellt das Debuggen etwas leichter.

Code: Alles auswählen

echo '__FILE__: '.htmlspecialchars(__FILE__).'<br />';
echo 'SERVER["DOCUMENT_ROOT"]: '.htmlspecialchars($_SERVER['DOCUMENT_ROOT']).'<br />';
echo 'SERVER["PATH_TRANSLATED"]: '.htmlspecialchars($_SERVER['PATH_TRANSLATED']).'<br />';
echo 'SERVER["SCRIPT_NAME"]: '.htmlspecialchars($_SERVER['SCRIPT_NAME']).'<br />';
echo 'DOCROOT: '.htmlspecialchars($DOCROOT).'<br />';
Balu
msto
ConPresso-Newbie
Beiträge: 7
Registriert: 26.12.2005 15:35
Hat sich bedankt: 2 Mal

Beitrag von msto »

Hi,

danke fuer die Erklaerungen.

Also, die Outputs sind wie folgt:

Code: Alles auswählen

__FILE__: E:\testing\_include\common.inc.php
SERVER["DOCUMENT_ROOT"]: E:/
SERVER["PATH_TRANSLATED"]:
SERVER["SCRIPT_NAME"]: /testing/_rubric/index.php
DOCROOT: E:/
Viel mehr muss ich gar nicht sagen, hehe, DOCROOT etc., Du hast ja an alle wichtigen Daten gedacht.

Ach, vielleicht noch das: PHP Version 5.0.5, Build Date: Sep 5 2005 15:50:13, Virtual Directory Support: enabled.

Danke und Gruss,

Marc.
msto
ConPresso-Newbie
Beiträge: 7
Registriert: 26.12.2005 15:35
Hat sich bedankt: 2 Mal

Beitrag von msto »

Noch als kurzer Nachtrag (mag vielleicht auch noch von Interesse sein):

Code: Alles auswählen

echo 'realpath(DOCROOT): '.realpath($DOCROOT).'<br />';
ergibt an der selben Stelle

Code: Alles auswählen

realpath(DOCROOT): E:\
was ja im Endeffekt das leading Shlash durch die Laenge 3 abschneidet.
Antworten