[php] waarde van variabele veranderd zonder reden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hallo,
Ik maar voor mijn site gebruik van een header.php. Deze wil ik op (bijna) alle pagina's includen. Om er voor te zorgen dat ik niet iedere keer het path van de header.php hoef te veranderen heb ik een script en mijn dreamweaver template gezet. Dit script maakt een variabele $site_root met daarin het aantal keer "../" achter elkaar wat nodig is om vanaf de locatie van het script naar de site root te komen of "./" als het script in de site root staat.
Dit werkt allemaal goed.

Maar als ik de variabele $site_root gebruik om de header.php te includen is de waarde van $site_root opeens veranderd en kan ik deze dus verder niet meer gebruiken:
PHP:
1
2
3
echo "voor: " . $site_root . "<br>";
include($site_root . 'includes/header.php');
echo "na: " . $site_root . "<br>";

geeft de volgende uitvoer: (script staat nu in de root)

voor: ./
na: /home/httpd/vhosts/boerhaavegroep.nl/httpdocs/

Dit probleem heb ik alleen als ik het script bij mijn host zet (protagonist linux)
als ik het thuis probeer (windows) blijft de waarde wel hetzelfde.

Ik heb wel geprobeerd te zoeken maar ik kon niet echt passende zoektermen bedenken (path veranderd etc) en daar kwam dan ook niet veel uit.

Kan iemand me vertellen wat hoe het komt dat dit zo is en hoe ik het kan voorkomen?

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

je gebruikt die var niet in header.php?

Acties:
  • 0 Henk 'm!

Verwijderd

Hoe ziet je header.php er percies uit? WOrdt $site_root daar niet in gedeclareerd ofzo?
edit:
Te laat

[ Voor 11% gewijzigd door Verwijderd op 06-08-2003 12:10 ]


Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Volgens mij doet php/linux dit automagisch na een include of fopen, etc. Op zich ook logisch, hij zet dan intern de ./ om in het current path, maar hij hoort niet stiekum je var te updaten...

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
ja, het lijkt me vrij duidelijk dat er iets in die header.php gebeurd wat de waarde verandert.
is toch ook niet zo heel moelijk om zelf te debuggen? gewoon hier en daar een paar keer $site_root echoën in header.php en je ziet vanzelf wanneer ie wel en niet veranderd.
misschien dat je in die header file nog wel iets include wat 'm verandert?

//edit:
zet anders die echo eens gelijk op de eerste regel van je header.php, dan weet je zeker of het door het includen zelf komt of niet

[ Voor 20% gewijzigd door marty op 06-08-2003 12:16 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De inhoud van mijn header.php is als volgt:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php
// includes
include($site_root . 'includes/config.php');
include($site_root . 'includes/functions.php');

// Forum variablen voor inloggen
define('IN_PHPBB', true);
$phpbb_root_path = $site_root . '/forum/';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
$userdata = session_pagestart($user_ip, PAGE_INDEX);


// laatste bezoek
$lastlogin = getdate($userdata['user_lastvisit']);
$lastlogin = $lastlogin['weekday'] . " " . $lastlogin['mday'] . " " . $lastlogin
['month'] . " " . $lastlogin['hours'] . ":" . $lastlogin['minutes']; 

// tijd dat je ingelogd bent
$tijd = $userdata['session_time'] - $userdata['session_start'];
$tijd = getdate($tijd);
if($tijd['hours'] > 1)
    $tijd =" (" . ($tijd['hours']-1) . " uur, " . $tijd['minutes'] . " min) ";
else
    $tijd =" (" .  $tijd['minutes'] . " min)";
    
//redirect
$redirect = "../.." . $PHP_SELF;

// Filepath in array zetten
$vanaf = 1;
$url = $_SERVER["SCRIPT_NAME"];
$location = str_replace(".php","",$url);
$location = str_replace("_","=",$location); //nog niet zeker spatie of _
$location = str_replace("/"," ",$location);
$location = ucwords($location);
$location = str_replace(" ","/",$location);
$location = str_replace("="," ",$location); 
$location = explode("/", $location);
$title = $location[(count($location)-1)];
?>

[ Voor 20% gewijzigd door Verwijderd op 06-08-2003 12:18 ]


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Papa Eend schreef op 06 August 2003 @ 12:12:
Volgens mij doet php/linux dit automagisch na een include of fopen, etc. Op zich ook logisch, hij zet dan intern de ./ om in het current path, maar hij hoort niet stiekum je var te updaten...
ik heb het zelf even getest:
http://www.van-weert.com/~Erkens/php/var_change.php

maar ik krijg het niet


edit:
en in die andere include files wordt $site_root ook niet aangepast?

[ Voor 14% gewijzigd door Erkens op 06-08-2003 12:19 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
nee
helemaal nergens...

als dat wel zo was zou ik het hier thuis ook moeten merken. het gebeurt nu alleen bij protagonist...

edit:

Ik word zo langzamerhand helemaal gek! nu is hij opeens wel weer zowel voor als na het includen hetzelfde....

ik ga er nog even naar kijken. en ik laat het wel horen als ik het niet meer weet (of als ik het opgelost heb)

[ Voor 49% gewijzigd door Verwijderd op 06-08-2003 12:26 ]


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
gewoon ff debuggen door $site_root in de header.php file hier en daar te echoën. zo moeilijk is dat toch niet ??

Acties:
  • 0 Henk 'm!

  • Rashann
  • Registratie: Maart 2000
  • Laatst online: 02-09 17:28

Rashann

Zoek de hond...

Verwijderd schreef op 06 augustus 2003 @ 12:22:
nee
helemaal nergens...

als dat wel zo was zou ik het hier thuis ook moeten merken. het gebeurt nu alleen bij protagonist...
Vergelijk anders ook de phpinfo eens van je thuismachine en die van de provider. Misschien dat er een setting anders staat die zoiets veroorzaakt.

If nothing is written below, I was the last to reply...


Acties:
  • 0 Henk 'm!

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 03-09 14:12
PHP verandert niet zomaaar variabelen, zonder dat je dat aangeeft. Er is dus ergens een stuk code dat er voor zorgt dat $site_root een nieuwe waarde toegekend krijgt.

- header.php doet dat.
- er is iets ingesteld in de auto_prepend instelingen van php, waardoor die code wordt uitgevoerd.

Verder zou het ook kunnen dat de de toekenning van $site_root in header.php gebeurt, maar onder windows anders ge-evalueert wordt.

Acties:
  • 0 Henk 'm!

Verwijderd

Gebruik eens een andere waarde dan $site_root, mischien heeft jou hosting php wel zo compiled dat hij automatisch $site_root vervangt door de root url van je site.
Pagina: 1