HJÆÆÆLP - haster
Jeg er totalt fucked...Jeg er igang med at lave et PHP-system, som andre (end mig selv) skal kunne bruge. Til det formål har jeg lavet en fil, som disse andre skal inkludere i deres kode via include() eller require(). Filen indeholder et antal funktioner, som brugerne af systemet skal kunne kalde. Da filen ligger på min server, så foregår svineriet via http, men enten er der noget, jeg ikke har fattet, eller osse er der noget galt, for de test-scripts, jeg har lavet, opfører sig direkte modsat, hvad der står i min PHP-manual (downloaded fra www.php.net, så den skulle vel være god nok.)
I denne famøse manual står der (and I quote):
Please note that both include() and require() actually pull the contents of the target file into the calling script file itself; they do not call the target via HTTP or anything like that. So any variable set in the
scope in which the inclusion happens will be available within the included file automatically, since it has effectively become a part of the calling file.
require( "file.inc?varone=1&vartwo=2" ); /* Won't work. */
$varone = 1;
$vartwo = 2;
require( "file.inc" ); /* $varone and $vartwo will be available in file.inc */
Don't be misled by the fact that you can require or include files via HTTP using the Remote files feature; the above holds true regardless.
Altså include() og require() virker praktisk talt lige som include i C/C++; nemlig ved at kodelinierne i den inkluderede film simpelthen 'kopieres' ned i den inkluderende fil, og at man kan dele funktioner og variable over inkludegrænserne. Det er løgn og latin, er det.
Jeg har lavet to små scripts og en include-fil, som viser problemet:
include.php3:
<?php
echo("pjat='$pjat'<BR>");
$pjat++;
?>
main.php3 (kan findes på http://www.moviemerchandise.dk/cgi-bin/main.php3)
<?php
$pjat=1;
require('http://www.moviemerchandise.dk/cgi-bin/include.php3?pjat=11');
echo("pjat='$pjat'<BR>");
?>
og main2.php3 (findes samme sted som main.php3)
<?php
$pjat=1;
require('http://www.moviemerchandise.dk/cgi-bin/include.php3?');
echo("pjat='$pjat'<BR>");
?>
Ifølge PHP-manualen (og almindelig sund fornuft), burde main.php3 resultere i, at der blev udskrevet to linier, nemlig:
pjat='1'
pjat='2'
men nej, resultatet bliver
pjat='11'
pjat='1'
altså, at pjat overføres som argument til PHP3-filen, og at den kun ændres lokalt af at blive inkrementeret,
main2.php3 burde give samme resultat som main.php3, men den giver
pjat=''
pjat='1'
altså at $pjat er ukendt i den inkluderede fil - stik i mod PHP3-manualen.
Kan nogen fortælle mig, hvad %#/(")¤ der foregår