2012-04-03 6 views
1

alle.PHP: absolute Pfade innerhalb umfasst mit localhost

Meine Frage bezieht sich auf ein Problem, das ich beim Versuch, eine universelle PHP-Vorlage für meine DOCTYPE-Abschnitt hinzufügen. Mein DOCTYPE-Include (passenderweise betitelt doctype.php) liegt im Verzeichnis/template und enthält auch Aufrufe, die auf meine CSS- und JS-Dateien verweisen, auf die ich für alle Seiten zugreifen möchte.

So ist das Problem aufgetreten, wenn ich versuche, den absoluten Pfad zu diesen Dateien (die CSS-und JS-Dateien) zu schreiben. Derzeit versuche ich:

<script type="text/javascript" src="<?php echo $_SERVER['DOCUMENT_ROOT'] . '/file/extension/to/javascript/file.js'; ?>"></script> 

und

<link rel="stylesheet" type="text/css" href="<?php echo $_SERVER['DOCUMENT_ROOT'] . 'file/extension/to/css/file.css'; ?>" 

ich auf meinem localhost die Anwendung über WAMP leite. Sieht man sich den Quellcode an, so scheint es, als würden die Links auf die entsprechenden Dateien verweisen (c: /wamp/www/examplesite/path/to/file/file.ext), und alles sollte gut sein. ABER es ist nicht ...

Das JavaScript ist nicht zugänglich und das Stylesheet funktioniert nicht. Ich weiß nicht, was ich tun soll.

ich auch versucht habe: den absoluten Pfad ohne den Einsatz von PHP -writing PHP-Variablen -Schaffung Dokument Wurzel zu halten und dann den entsprechenden Verzeichnispfad verketten, um die Dateien zugreifen.

Irgendwelche Vorschläge? Und wie wird sich das ändern, wenn ich die Verzeichnisstruktur auf meinen Online-Server im Vergleich zu meinem aktuellen localhost hochlade?

+0

Verzeichniszugriffsprobleme scheint es. Wenn ich falsch liege und jemand antwortet, trenne mich in.: P – hjpotter92

+0

Schau dir das Netzwerkfenster an (in Chrome: Strg + Umschalt + i, klicke auf die Registerkarte Netzwerk, aktualisiere deine Webseite). Die HTTP-Anfrage, die das Javascript erhält, gibt einen Fehler 404 oder etwas anderes zurück? Wenn es ein 404 ist, dann ist der Pfad für die js falsch, aber es könnte ein Problem in Bezug auf die Zugriffsrechte auf die Datei sein. Außerdem können Sie den Pfad sehen, mit dem der Browser die js anfordert. –

Antwort

2

Natürlich muss jede Art von Ressource (JS, CSS, Bilder usw.) über http (s) angefordert werden und es ist daher unmöglich, sie direkt mit einem absoluten Pfad zu erreichen. Denken Sie an die Sicherheitsimplikationen eines solchen Ansatzes. Sie müssen also immer Webpfade relativ zu Ihrem Webstammverzeichnis verwenden.

Zum Beispiel:

<script type="text/javascript" src="http://localhost/myproject/media/ja/file.js"></script> 
3

Sie könnten _SERVER $ versuchen wollen [ 'HTTP_REFERER'] statt. Es gibt Ihnen den Weg, nach dem Sie suchen.

Auf meiner lokalen Maschine, die WAMP verwendet, habe ich <?php print_r($_SERVER); ?> verwendet, um zu sehen, welche Werte es gibt.

Außerdem können in den Schnipsel einige Tippfehler enthalten sein. Zum Beispiel brauchen Sie nicht das führende/in dem ersten Beispiel, das Sie gaben.

Zum Beispiel:

<script type="text/javascript" src="<?php echo $_SERVER['HTTP_REFERER'] . 'file/extension/to/javascript/file.js'; ?>"></script> 
<link rel="stylesheet" type="text/css" href="<?php echo $_SERVER['HTTP_REFERER'] . 'file/extension/to/css/file.css'; ?>"></link> 

Oder da HTTP_REFERER kann nicht in einigen Fällen vertraut werden, möchten Sie vielleicht eine Funktion erstellen, die das Basisteil des absoluten Pfad aufbaut.

<?php 
function getAddress() { 
    $protocol = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https' : 'http'; 
    $filenamepattern = '/'.basename(__FILE__).'/'; 
    return $protocol.'://'.$_SERVER['HTTP_HOST'].preg_replace($filenamepattern,"",$_SERVER['REQUEST_URI']); 
} 
?> 

es dann wie so nennen:

<script type="text/javascript" src="<?php echo getAddress() . 'file/extension/to/javascript/file.js'; ?>"></script> 
<link rel="stylesheet" type="text/css" href="<?php echo getAddress() . 'file/extension/to/css/file.css'; ?>"></link> 
1

Sie auf Dateien auf dem lokalen Computer mit dem Dateipfad (zB: C: \ einig \ Pfad \ Datei \), wenn Sie sollte eine URL verwenden (zB: http://localhost/some/path/to/file). Der HTML-Code wird vom Browser des Clients analysiert, sodass beim Versuch, auf einen Pfad zuzugreifen, der keine URL ist, dies nicht möglich ist.

Statt $ _SERVER der Verwendung von [ 'DOCUMENT_ROOT'] können Sie entweder absolute URLs verwenden wie

<script type="text/javascript" src="/path/to/my/file.js"></script> 

, wo die "/ path" -Ordner Ihre Basis Web-Verzeichnis ist, oder können Sie relative URLs verwenden, basierend auf Unabhängig davon, in welchem ​​Verzeichnis sich die Datei befindet, in die Sie die Datei doctype.php einfügen. Ich würde empfehlen, das letztere nicht zu tun, da es ein Schmerz im Hintern ist, um im Auge zu behalten.

Wenn Sie relative URLs verwenden, sollten Sie keine Probleme haben, wenn Sie Ihren Code auf einen neuen Host verschieben, vorausgesetzt, die Verzeichnisstruktur bleibt gleich.

+0

Üben Sie auch die Verwendung von 'dirname (__ FILE __)' für relative Pfade. – Panagiotis

+1

@ Panagiotis sollten Sie erwähnen, dass nur funktioniert unter der Annahme, dass Assets auf der gleichen Ebene oder weiter unten in der zugänglichen Dateisystemstruktur gespeichert sind. Wie ein Front-Controller-Muster. – Xeoncross

+0

Richtig! +1 für die Erwähnung! – Panagiotis

0

Sie über die falsche Richtung von Dateien auf Ihrer Seite einschließlich, sollten Sie HTTP URLS stattdessen werden:

<script type="text/javascript" src="/file/extension/to/javascript/file.js"></script> 

Oder, wenn Sie es vorziehen, eine Variable mit dem Hostnamen zu verwenden:

<script type="text/javascript" src="http://<?php echo $_SERVER['HTTP_HOST']; ?>/file/extension/to/javascript/file.js"></script>