[PHP] Absoluut pad naar URL

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Svennetjee
  • Registratie: December 2007
  • Laatst online: 21-09 18:13
Goedemorgen,

ik ben op het moment bezig met het visualiseren van de directorystructuur in PHP. Laten we er even van uit gaan dat er in de root van mijn server twee mappen en twee bestanden staan, en in de twee mappen staan ook twee bestanden. Met PHP heb ik het volgende voor elkaar gekregen:
  • Map 1
    • Bestand 1.1
    • Bestand 1.2
  • Map 2
    • Bestand 2.1
    • Bestand 2.2
  • Bestand 1
  • Bestand 2
Nu maak ik deze structuur met behulp van het absolute pad naar het bestand of de directory, maar ik zou graag van een bestandsnaam een link maken. Het werkt natuurlijk niet om te linken met een absolute link, want HTML zal dat niet kunnen vinden. Nu is mijn vraag: hoe 'rewrite' ik makkelijk deze absolute links naar een URL die ik in het href atribuut van de <a> kan zetten? Heeft PHP daar een functie voor?

Alvast bedankt!

Acties:
  • 0 Henk 'm!

  • Pkunk
  • Registratie: December 2003
  • Laatst online: 11-09 17:52
In .net heb je MapPath. Volgens mij is dat wat je bedoeld. Even googlen naar MapPath in php leverde mij:
Realpath misschien?

[ Voor 44% gewijzigd door Pkunk op 04-05-2009 10:40 ]

Hallo met Tim


Acties:
  • 0 Henk 'm!

  • HenkEisDS
  • Registratie: Maart 2004
  • Laatst online: 21-09 01:11
<?php echo $_SERVER['PHP_SELF']; ?> er voor plakken?

Acties:
  • 0 Henk 'm!

  • Svennetjee
  • Registratie: December 2007
  • Laatst online: 21-09 18:13
Realpath is niet de oplossing, die zet alleen de ../../ om naar een absoluut pad.

PHP_SELF is ook niet de oplossing, aangezien je dan taferelen krijgt als 'http://www.website.tld/usr/bin/www/...'

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Nu online
Je moet het verschil weten tussen je webdir en de systeemdir. Als je website bijvoorbeeld in /var/www staat, en je bestanden in /var/www/files dan moet je dus het gedeelte /var/www van het systeempad afhalen. Als je /var/www/ weet dan kun je dit hardcoden. Weet je het niet dan kun je met behulp van deze code bepalen in welke systeemmap een script staat:
PHP:
1
$path = dirname(__FILE__);

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • --MeAngry--
  • Registratie: September 2002
  • Laatst online: 19-09 16:35

--MeAngry--

aka Qonstrukt

Staan die bestanden uberhaupt wel in de webroot? Zo nee, dan kan wat je wil niet eens, tenzij, jij ervoor zorgt dat PHP het bestand zelf helemaal inleest, en het vervolgens weer uitstuurt naar de gebruiker.

Tesla Model Y RWD (2024)


Acties:
  • 0 Henk 'm!

  • Pkunk
  • Registratie: December 2003
  • Laatst online: 11-09 17:52
Ik begrijp het probleem niet zo geloof ik. Je hebt ergens een html pagina:
c:\windows\website\html\pagina1.html
En een plaatje:
c:\windows\website\plaatjes\plaatje.gif
Dan wil je in die html een link maken naar dat plaatje? Maar <a href="/plaatjes/plaatje.gif">plaatje</a> is niet goed?

Hallo met Tim


Acties:
  • 0 Henk 'm!

  • Svennetjee
  • Registratie: December 2007
  • Laatst online: 21-09 18:13
T-MOB schreef op maandag 04 mei 2009 @ 10:48:
Je moet het verschil weten tussen je webdir en de systeemdir. Als je website bijvoorbeeld in /var/www staat, en je bestanden in /var/www/files dan moet je dus het gedeelte /var/www van het systeempad afhalen. Als je /var/www/ weet dan kun je dit hardcoden. Weet je het niet dan kun je met behulp van deze code bepalen in welke systeemmap een script staat:
PHP:
1
$path = dirname(__FILE__);
Hmm, die oplossing zou ook kunnen werken, maar ik heb net nog iets anders gevonden, weliswaar ongeveer hetzelfde.

Ik heb een speciale map gemaakt voor alle uploads, en als ik het absolute pad 'explode' op deze mapnaam, dan krijg ik het pad te zien van de map naar het bestand. Plak ik daar mijn URL achter met de uploadmap naam, dan krijg ik een kloppende URL te zien.

Iedereen die een oplossing heeft aangedragen in ieder geval bedankt!

Edit: nog even ter verduidelijking:

PHP:
1
2
$expl = explode(DIR_UPLOADS, $path.'/'.$file);
$return .= '<a href="'.WEB_ROOT.DIR_UPLOADS.$expl[1].'">'.$file.'</a>';

[ Voor 45% gewijzigd door Svennetjee op 04-05-2009 10:55 ]


Acties:
  • 0 Henk 'm!

  • Kwastie
  • Registratie: April 2005
  • Laatst online: 10:51

Kwastie

Awesomeness

Wat over het algemeen het makkelijkste is, is een constante te definiëren. En voor elk bestand dat je wilt weergeven / includen / enz. dit te plaatsen.

Voorbeeld:

PHP:
1
2
3
4
5
<?php
define('BASE_URL', 'http://www.website.nl/map/');
?>

<img src="<?php echo(BASE_URL); ?>images/logo.png" /> 


Dit is niet de mooiste oplossing, maar wel een gemakkelijke.

When I get sad i stop being sad and be awesome instead


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 21-09 10:43

Matis

Rubber Rocket

Kwastie schreef op maandag 04 mei 2009 @ 13:44:
Wat over het algemeen het makkelijkste is, is een constante te definiëren. En voor elk bestand dat je wilt weergeven / includen / enz. dit te plaatsen.

Voorbeeld:

PHP:
1
2
3
4
5
<?php
define('BASE_URL', 'http://www.website.nl/map/');
?>

<img src="<?php echo(BASE_URL); ?>images/logo.png" /> 


Dit is niet de mooiste oplossing, maar wel een gemakkelijke.
Ja, het is idd niet de mooiste maar wel de meest handige oplossing. vooral omdat dit ook niet afhankelijk is van windows of linux servers en dat het eenvoudig aan te passen is!

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

Of:

PHP:
1
2
3
4
5
6
7
//using this site as reference for server compatibility: http://koivi.com/apache-iis-php-server-array.php

//checking if this link is using SSL or normal http
$proto = ((!isset($_SERVER["HTTPS"]) || $_SERVER["HTTPS"] != "on")) ? 'http://' : 'https://';
$url = $proto . $_SERVER['HTTP_HOST'];

$url .= str_replace("//", "/", $_SERVER["SCRIPT_NAME"]);
Pagina: 1