[PHP] Class zijn eigen locatie laten achterhalen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Bram77
  • Registratie: September 2004
  • Laatst online: 10-07-2023
Ik ben hier al even mee aan het vogelen maar kom er niet uit.

fileUpload.class.php wordt geinclude in b.v. index.php

code:
1
2
./classes/FileUpload/fileUpload.class.php
./index.php


Kan de class na initiatie er zelfstandig achterkomen wat zijn locatie is? Wanneer ik gebruik maak van de $_SERVER variabelen kom ik altijd uit op de locatie van het bestand waardoor de class geinclude wordt. Dat is in ieder geval waar ik tegenaan loop.


Waarom ik dit wil doen....
Ik ben een 'AJAX' upload class aan het schrijven maar wil niet dat de gebruiker meer dan 1 pad moet aangeven. Dat zou dus vanzelfsprekend het directory zijn waar naartoe geupload wordt.
Uploaden met AJAX kan helemaal niet (vandaar de aanhalingstekens), maar er is een antieke manier die de suggestie wekt dat het AJAX is. Er wordt een hidden iframe gebruikt waarin vanzelfsprekend een pagina geladen wordt die het verplaatsen naar de directory verzorgd.
Deze pagina bevind zich altijd op de zelfde plek t.o.v. het fileUpload.class.php bestand. N.l.

code:
1
./classes/FileUpload/uploader.php


Een mogelijkheid zou zijn om de gebruiker "uploader.php" altijd in het zelfde directory te laten plaatsen als waar in een bestand een initialisatie van de class plaats vindt. Dit wil ik niet doen omdat ik daarmee van een structuur af zou moeten wijken waar ik heel consequent in ben.

Iemand een idee?

Acties:
  • 0 Henk 'm!

  • RAJH
  • Registratie: Augustus 2001
  • Niet online
Is dirname(__FILE__) wat je bedoeld?

Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 22:05
Even kijken of ik op het goede spoor zit. Je probeert onderstaande code
PHP:
1
$_SERVER['PHP_SELF'];


En deze geeft bestandsnaam van het uitvoerende script, relatief ten opzichte van de document root.

Stel je voor dat de site gehost wordt op http://example.com/portal, dan staat de file uploader.php op http://example.com/portal/classes/FileUpload/uploader.php. Wat je dan wil terugkrijgen is:
classes/FileUpload/fileUpload.class.php

maar je krijgt
index.php
omdat index.php het uitvoerende script is en niet fileUpload.class.php. Is dat je probleem?

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

  • Bram77
  • Registratie: September 2004
  • Laatst online: 10-07-2023
Dat is precies wat ik bedoel in mijn eerste post :)
(Je bedoelt vast $_SERVER, i.p.v. $SERVER)

dirname(__FILE__) is wat ik zocht. Ik was de __FILE__ variable al eens eerder tegengekomen maar wist niet precies wat hij deed. Dat is nu helder. Heel handig. Bedankt mensen :)

[ Voor 8% gewijzigd door Bram77 op 14-11-2007 12:01 ]


Acties:
  • 0 Henk 'm!

  • Bram77
  • Registratie: September 2004
  • Laatst online: 10-07-2023
Uhhhhmmm, foutje. Iets te vroeg gejuigd.
dirname(__FILE__) geeft het absolute server path terug. Ik wil het path vanaf de document root.

Nu krijg ik dus terug
code:
1
/opt/guide/www.domein.nl/HTML/classes


Wat ik wil terug krijgen is...
code:
1
/classes

Acties:
  • 0 Henk 'm!

Verwijderd

Mijn advies:

Zet in een config file het absolute pad op de server en het relatieve pad (dus het externe pad hoe via Apache bij de files komt).

Dat werkt simpel en betrouwbaar, alle andere manieren onder PHP zijn (IMHO) onbetrouwbaar en willen ook nogal eens van gedrag wijzigen bij een andere PHP versie.

Acties:
  • 0 Henk 'm!

  • Bram77
  • Registratie: September 2004
  • Laatst online: 10-07-2023
Tsja, als het echt niet anders kan.... Maar dat is juist wat ik wil voorkomen.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Realpath maakt van een relatief pad een absoluut pad, volgens mij wil de TS net andersom?

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Bram77 schreef op woensdag 14 november 2007 @ 12:33:
Uhhhhmmm, foutje. Iets te vroeg gejuigd.
dirname(__FILE__) geeft het absolute server path terug. Ik wil het path vanaf de document root.

Nu krijg ik dus terug
code:
1
/opt/guide/www.domein.nl/HTML/classes


Wat ik wil terug krijgen is...
code:
1
/classes
dirname(__FILE__) - $_SERVER['DOCUMENT_ROOT'] ?

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • Bram77
  • Registratie: September 2004
  • Laatst online: 10-07-2023
code:
1
str_replace($_SERVER['DOCUMENT_ROOT'], "", dirname(__FILE__));


Levert het gewenste resultaat. Bedankt voor de hulp!

Acties:
  • 0 Henk 'm!

Verwijderd

Let wel dat document root direct uit de serverconfig wordt overgenomen, deze hoeft dus niet daadwerkelijk te kloppen. Als je zelf controle hebt over de omstandigheden zal dat geen probleem zijn, maar als het bij 3rd parties komt te staan moet je even opletten.
Pagina: 1