php pfad simulieren

baeri

Erfahrenes Mitglied
Hallo,

gibt es die Möglichkeit in einer PHP vorzugeben, dass diese ganz woanders liegt???

Sinn und Zweck ist folgender:

code der (nicht von mir geschrieben wird), greift auf diverse Objekte zu
z.B. style.css
oder script.js

Diese Objekte liegen an einem relativen Pfad
> unterordner/tester1/style.css ... bzw. script.js

jetzt könnte man mit php eine variable einfüge:

<link rel="stylesheet" href="<?php echo $relativerPfad; ?>style.css">

aber die geschriebene "Hauptdatei" muss so oder so durch eine php durch:

also main.php includiert eine html in welcher
<link rel="stylesheet" href="style.css">
steht

ist es möglich, dass er nicht Style da sucht wo die PHP liegt sondern da wo ich das in der PHP angebe

mit z.B. RootPath = "unterordner/tester1/";
oder soetwas???

und alle Dateien welche der Browser dann aufruft sucht er "unterhalb" von unterordner/tester1/ ...

> ich hoffe das ist nicht zu Komplex erklärt...

Vielen Dank für jeden Tipp

edit: ich weiß, dass man sowas mit einer htaccess machen kann... allerdings will ich das ja eher "dynamisch"...
 
Zuletzt bearbeitet:
Falls du eine Ordnerhirachie ähnlich wie folgend hast:
Code:
|-unterorder/
   |-tester1/
       |-style.css
       |-script.js
|-php/
   |-main.php
|-index.php

So kannst du in der .php-Datei folgendest tun:

PHP:
<?php
$relativerPfad = '/unterorder/tester1/';
?>
<link rel="stylesheet" href="<?php echo $relativerPfad; ?>style.css">

Der erste Slash / bei $relativerPfad ist ernst zunehmen, da diese zur Rootverzeichnis zugreift. So hat dein Browser die Möglichkeit vom Rootverzeichnis den Pfand langzulaufen.
 
ja, naja... das habe ich ja bereits geschrieben, dass ich "diese" Lösung eher nicht bevorzuge...

mein Pfad sieht etwas "so" aus:

Code:
|-unterorder/
   |-tester1/
       |-main.html
       |-style.css
       |-script.js
|-loader.php

in der main.html schaut es "ETWA" so aus (und diese Datei habe ich "nicht" unter Kontrolle, deshalb würde ich gerne "ohne" Änderung das ausführen):

Code:
... hier der head ...
<link href="style.css">
<script src="script.js"></script>
... hier dann noch code ...

in der loader.php

Code:
<?php
   include( 'unterordner/tester1/main.html' );
?>

> das Include ist deshalb "notwendig" weil die Datei nicht zwingend *.html heißt und weil da auch u.a. php-code ausgeführt werden könnte (das funktioniert aber auch alles wie es soll).

das einzige was jetzt nicht funktioniert ist, dass die Datei glaubt sie liegt im "root" Verzeichnis und sucht dementsprechend Style und Script auch im "root"

praktisch wäre wenn ich jetzt vor dem include den pfad "ändern" könnte...

[wenn man das jetzt aus der Windows oder Linuxwelt "kopiert"]
im cmd führ ich also nicht
C:\>unterordner\tester1\main.html aus
sondern
C:\unterordner\tester1> main.html

=> vermutlich geht das garnicht!?
 
Da fallen mir spontan nur 4 Lösungansätze.

1. Du änderst deine Ordnerhirachie wie folgend: (erfüllt nicht ganz die Vorraussetzung, die du dir wünschst)
Code:
|-unterorder/
   |-tester1/
       |-main.html
|-style.css
|-script.js
|-loader.php

2. Du definierst eine globale Konstante in loader.php und fügst diese bei include und in main.html ein. (erfüllt nicht ganz die Vorraussetzung, die du dir wünschst)
loader.php:
PHP:
   define("MEINPFAD", "unterordner/tester1/");
   include( MEINPFAD.'main.html' );

main.html
HTML:
... hier der head ...
<link href="<?php echo MEINPFAD;?>style.css">
<script src="<?php echo MEINPFAD;?>script.js"></script>
... hier dann noch code ...

3. via .htaccess/web.config was du ja vorne rein nicht möchtes, jedoch in diesem Fall evtl. die effizientere Lösung wäre.

4. Du änderst deinen include-Pfad, welche aber keine Auswirkung auf den Pfad der Dateien in HTML haben.
loader.php:
PHP:
set_include_path('/unterordner/tester1/');
//ODER
ini_set('include_path', '/unterordner/tester1/');
include('main.html' );
 
Zuletzt bearbeitet:
also die ersten Ideen funktionieren leider nicht, evtl müsste ich noch dazu sagen, dass es einige Ordner gibt...
=> also mit "unterschiedlichen" MAINs, STYLEs und SCRIPTs...

die letzte Idee finde ich klasse, aber so wie es ausschaut, übernimmt er den "geänderten" Includepath nur innerhalb der PHP... den Style findet er leider nicht :/ ...
 
es gibt eine "Möglichkeit" durch den Po über die Schulter hinten ans Auge:

PHP:
<?php
$_REQUEST['tester'] = "tester1"
$file = file_get_contents( "unterordner/" . $_REQUEST['tester'] . "/main.prc" );
$file = str_replace( 'style.css', "unterordner/" . $_REQUEST['tester'] . "/style.css", $file );
$file = str_replace( 'script.js', "unterordner/" . $_REQUEST['tester'] . "/script.js", $file );

eval( " ?> " . $file . " <?php " );
?>

aber 1. muss ich dann genau die "includieren" Dateien (wie style.css & script.js) kennen und
2. fühlt sich das nicht wirklich "gut" an... <- auch im sinne von "PFUSCH".

ich bin immer noch offen für "Bessere" Lösungen
 
Das nächste Problem ist welches entsteht, wenn ich weitere "Dateien" relativ zum Ort einbinde...

z.B. Bilder oder im script.js einen worker.js
<- leider wird der NIE gefunden

Also stehe ich wieder an den Punkt andem ich die PHP am liebsten "relativ" zum Ort ausführen würde und nicht die Dateien "relativ" zur php einladen...

> gut ich könnte, jetzt die PHP Datei immer in den "Tester" Ordner kopieren... damit erzeug ich irgendwie "Datenmüll"
 
Das nächste Problem ist welches entsteht, wenn ich weitere "Dateien" relativ zum Ort einbinde...

z.B. Bilder oder im script.js einen worker.js
<- leider wird der NIE gefunden

Also stehe ich wieder an den Punkt andem ich die PHP am liebsten "relativ" zum Ort ausführen würde und nicht die Dateien "relativ" zur php einladen...
Was Dir offensichtlich fehlt, ist die Definition des Basis-URI, um mit absoluten Pfaden relativ zu ihm hantieren zu können.
  1. http://wiki.selfhtml.org/wiki/Refer...adangaben_relativ_zum_Basis-URI_referenzieren
  2. http://wiki.selfhtml.org/wiki/Referenz:HTML/base -> http://wiki.selfhtml.org/wiki/HTML/Kopfdaten/base
 
@SpiceLab

JA MAN...

da würd ich schon wieder n Bierchen ausgeben. Ich such Stundenlang und du weißt es einfach...

für die Nachwelt...

relative PHP-Pfade habe ich mit
chdir();
und die HTML-Pfade habe ich mit
<base> geändert

das einzige ist jetzt nur, dass ich das <base> irgendwie im <head> einpflegen muss... das kann man leicht mit getfilecontent machen und dann in PHP einen replace machen
aus <head> wird <head><base...>

evtl. hat da auch noch einer ne "schönere" lösung, weil wenn jemand den head vergisst... <- naja dann hat er pech ^^
 
Etwas schicker fände ich einen Output-Buffer, ist aber ansonsten der gleiche Ansatz.

PHP:
ob_start();
require __DIR__ . '/unterordner/tester1/main.html';
$data = ob_get_clean();

$data = str_replace('</head>', '<base ...></head>', $data, 1);

Letztlich bleibt das alles aber mehr oder weniger ein Hack/Workaround.
 
Zurück