[PHP] Variabele word niet doorgegeven

Pagina: 1
Acties:
  • 106 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • HiddenWolf
  • Registratie: September 2003
  • Laatst online: 10-01 08:08
Ik heb net een heel simpel setje scripts opgezet
Het zijn twee files, en de test is of hij de variabele url doorgeeft aan de volgende file.

code:
1
2
3
4
5
6
#file1.php
$url='http://localhost/';
require('file2.php');

#file2.php
echo "$url";    #dit geeft dus http://localhost/


Doe ik echter:
code:
1
2
3
4
5
6
#file1.php
$url='http://localhost/;
require('$url/file2.php');

#file2.php
echo "$url";    #$url blijft leeg, evenals elke andere meegegeven variabele


Is mijn server nou vaag, of ligt het aan mij?

Dit voorbeeld is weinig nuttig, maar ik zet meestal veel informatie in de header, die ik doorspeel naar meerdere files. Dit werkt nu dus niet meer als ik een variabele in de link gebruik (wat kan helpen om dode links tegen te gaan)

Acties:
  • 0 Henk 'm!

Verwijderd

HiddenWolf schreef op 10 oktober 2004 @ 12:05:
Ik heb net een heel simpel setje scripts opgezet
Het zijn twee files, en de test is of hij de variabele url doorgeeft aan de volgende file.

code:
1
2
3
4
5
6
#file1.php
$url='http://localhost/';
require('file2.php');

#file2.php
echo "$url";    #dit geeft dus http://localhost/


Doe ik echter:
code:
1
2
3
4
5
6
#file1.php
$url='http://localhost/;
require('$url/file2.php');

#file2.php
echo "$url";    #$url blijft leeg, evenals elke andere meegegeven variabele


Is mijn server nou vaag, of ligt het aan mij?

Dit voorbeeld is weinig nuttig, maar ik zet meestal veel informatie in de header, die ik doorspeel naar meerdere files. Dit werkt nu dus niet meer als ik een variabele in de link gebruik (wat kan helpen om dode links tegen te gaan)
Het ligt aan jou. Als je require gebruikt met een URL erin wordt file2.php door een andere instance van de PHP interpreter uitgevoerd. Het is even doordenken, maar je moet je goed afvragen waar je code wordt uitgevoerd. Volgens mij leg ik het niet goed uit, maar goed... ;-)

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

PHP is serverside scripting en dus Programming & Webscripting :)

En ow, uitroeptekens in topictitels zijn zo schreeuwerig, we snappen het wel hoor ;)

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • seamus21
  • Registratie: December 2001
  • Laatst online: 24-02-2018
Zou je misschien even kort kunnen vertellen wat je wilt bereiken met de code die je wilt gaan maken. Abstract graag dus zonder code voorbeelden :P

Always shoot for the moon. Even if you miss you will land among the stars...


Acties:
  • 0 Henk 'm!

Verwijderd

Het is heel simpel. Je gebruikt enkele quotes in require(). Als je enkele quotes gebruikt, dan wordt de tekst letterlijk geinterpreteerd. Dus $url wordt echt als $url gezien, en niet als http://localhost.
Er zijn 2 oplossingen:
1. Vervang de enkele quotes door dubbele quotes
2. Zet de variabele $url buiten de quotes en hang de string erachter met een .

Acties:
  • 0 Henk 'm!

  • HiddenWolf
  • Registratie: September 2003
  • Laatst online: 10-01 08:08
Hm, dat is dan een tikfout van mij. Mijn code is wel met dubbele qoutes.

Enkel - Dubbel dat zie ik nog wel.

Wat ik eigenlijk wil:
simpel gezegd. geen gezeik met gebroken links .Ik wil van een bestand in bv /nl/content/product/ een logo kunnen halen uit /images/ zonder dat ik me telkens zorgen hoef te maken over de links.
Het idee was om php de server-locatie te laten achterhalen, en dan gewoon alle links absoluut te maken.

Heb nu net m'n layout zoals ik hem hebben wil, en heb nog niet alle scripts geschreven en de database aangemaakt. Ik verving 'copyright - HiddenWolf' door copyright - $author, en om het simpel te houden zet ik dan de lijst met variabelen die later in de db gaan, zoals $author even in een lijstje.

Als ik weet wat ik in de db wil hebben, is het een stuk simpeler om hem op te zetten, nietwaar.

Acties:
  • 0 Henk 'm!

Verwijderd

Is het probleem niet dat de dubbele slashes krijgt?

$url = 'http://localhost/';
require("$url/file2.php");

Want dit levert op:

require('http://localhost//file2.php');

?

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Verwijderd schreef op 10 oktober 2004 @ 12:39:
Is het probleem niet dat de dubbele slashes krijgt?

require('http://localhost//file2.php');
Nee, het is zoals Xenna zegt. Include/require met een URL erin doet een HTTP request, en dat is eigenlijk hetzelfde als dat je direct file2.php in je browser opent. Variables worden niet doorgegeven.

Probeer file2.php eens file2.php.txt te noemen, dan werkt het waarschijnlijk wel. De server parset hem dan als het goed is niet, en file1 krijgt gewoon de PHP code die hij kan parsen.

Acties:
  • 0 Henk 'm!

  • HiddenWolf
  • Registratie: September 2003
  • Laatst online: 10-01 08:08
Thanks Glowmouse.
Heb er een andere extentie van gemaakt, en nu werkt het wel.

Acties:
  • 0 Henk 'm!

  • MJV
  • Registratie: Mei 2003
  • Nu online

MJV

HiddenWolf schreef op 10 oktober 2004 @ 12:30:
Hm, dat is dan een tikfout van mij. Mijn code is wel met dubbele qoutes.

Enkel - Dubbel dat zie ik nog wel.

Wat ik eigenlijk wil:
simpel gezegd. geen gezeik met gebroken links .Ik wil van een bestand in bv /nl/content/product/ een logo kunnen halen uit /images/ zonder dat ik me telkens zorgen hoef te maken over de links.
Het idee was om php de server-locatie te laten achterhalen, en dan gewoon alle links absoluut te maken.
../images/
Dan pakt kan je dus vanuit /nl/content/product/ een logo halen uit /images. Op welke (*nix) server het script ook draait.

Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
PHP:
1
require($_SERVER['DOCUMENT_ROOT'].'/file2.php');

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
GlowMouse schreef op 10 oktober 2004 @ 12:51:
[...]

Nee, het is zoals Xenna zegt. Include/require met een URL erin doet een HTTP request, en dat is eigenlijk hetzelfde als dat je direct file2.php in je browser opent. Variables worden niet doorgegeven.

Probeer file2.php eens file2.php.txt te noemen, dan werkt het waarschijnlijk wel. De server parset hem dan als het goed is niet, en file1 krijgt gewoon de PHP code die hij kan parsen.
Omg dat is me ff een portie ranzig. Die file staat toch op de server zelf, include dan toch gewoon locaal die file. IMO had de PHP crew nooit die fopen URL wrapper moeten bouwen, want dat insprireert mensen die PHP amper kunnen gebruiken tot nog ranzigere constructies.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info

Pagina: 1