Avatar billede roadkill Nybegynder
08. juni 2000 - 21:15 Der er 5 kommentarer og
1 løsning

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
Avatar billede roadkill Nybegynder
08. juni 2000 - 21:22 #1
Jeg glemte at nævne, at det hele kører fint, når jeg kalder inklude-filen include.inc i stedet - eller når jeg ligger den på min telia-hjemmeside, som ikke aner, hvad PHP3 er. Kan det være min webhosts server, der er konfigureret forkert??
Avatar billede nostra_d92 Nybegynder
08. juni 2000 - 21:32 #2
jeg har ikke såmeget forstand på php kunlidt mendet der sagde mig noget var at deres side var med .net og ikke com kan det våre at der er fake?
prøv at se på:
www.webcafe.dk
der ved jeg at det er rigtigt
Avatar billede exception Nybegynder
08. juni 2000 - 22:09 #3
Avatar billede roadkill Nybegynder
08. juni 2000 - 22:16 #4
Læs nu, hvad jeg skriver. Det er jo netop det, der er problemet. Det DUER, når jeg sender pjat med via ?pjat=11, og det DUER IKKE, når jeg gør det 'rigtigt'
Avatar billede exception Nybegynder
08. juni 2000 - 23:11 #5
Prøvede det lige... Du har ret i at det ikke virker når man bruger URLs, selv når det er på samme server. Jeg får følgende fejl:

Fatal error: Failed opening required 'http://localhost/include.php3' in C:\webroot\main.php3 on line 6.

Hvis jeg kun bruger filnavnet virker det fint.

Man KAN IKKE inkludere en URL med require eller include. PHP filen bliver jo parset hvis du henter den vha. en URL, så du vil derfor kun få HTML tilbage, ikke PHP filen.

Så main.php3 må blive til følgende for at det virker.

<?php
$pjat=1;
require('include.php3');
echo("pjat='$pjat'<BR>");
?>

include.php3 er uændret.
Avatar billede roadkill Nybegynder
09. juni 2000 - 09:08 #6
exception >> du har helt ret. Det er sgu den parsede udgave, der bliver inkluderet. *LOL*
Pointene er velfortjente, selvom du fik dem en postgang for tidligt... tak for hjælpen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester