Avatar billede dennism Nybegynder
27. januar 2004 - 15:51 Der er 58 kommentarer og
1 løsning

PHP - variabel

Jeg har denne kode:

<?
$_GET[test] = "hej";
echo"test: $test";
?>

Når jeg kører denne på min local-server får jeg:
test:

Køres den på mit webhotel hos b-one får jeg:
test: hej

Hvordan laver jeg om på det?
Jeg er ikke interesseret i at en GET-variabel registreres som en normal variabel!
Avatar billede jakobclausen Nybegynder
27. januar 2004 - 15:55 #1
Så vidt jeg ved er det ikek rigtig noget du kan gøre noget ved, da det skyldes den php-version og de indstillinger de har hos b-one.
Avatar billede googolplex Novice
27. januar 2004 - 15:56 #2
<?php

Smid dette i starten af din side:

function unregister_globals()
{
    $COOKIE = $_COOKIE;
    $ENV = $_ENV;
    $FILES = $_FILES;
    $GET = $_GET;
    $POST = $_POST;
    $REQUEST = $_REQUEST;
    $SERVER = $_SERVER;

    if (isset($_SESSION))
    {
        $SESSION = $_SESSION;
    }

    foreach ($GLOBALS as $key => $value)
    {
        if ($key != 'GLOBALS')
        {
            unset($GLOBALS[$key]);
        }
    }

    $_COOKIE = $COOKIE;
    $_ENV = $ENV;
    $_FILES = $FILES;
    $_GET = $GET;
    $_POST = $POST;
    $_REQUEST = $REQUEST;
    $_SERVER = $SERVER;

    if (isset($SESSION))
    {
        $_SESSION = $SESSION;
    }
}

unregister_globals()

?>
Avatar billede dennism Nybegynder
27. januar 2004 - 15:57 #3
Det er faktisk ik så smart.. Har jo skrevet mine koder til at funkere på denne måde. Det kan evt. godt blive problemer på et tidspunkt!
Avatar billede googolplex Novice
27. januar 2004 - 15:57 #4
Mangler lige et ';' efter unregister_globals() :)
Avatar billede dennism Nybegynder
27. januar 2004 - 15:58 #5
Sikker på at den virker, googolplex?
Avatar billede googolplex Novice
27. januar 2004 - 15:59 #6
Ja, bruger den selv og har taget den fra en artikkel i php-arkitect, tror de har tjek på det ;)
Avatar billede dennism Nybegynder
27. januar 2004 - 16:00 #7
Når jeg kører det på min server, så får jeg en "siden kan ikke vises" fejl!
Avatar billede googolplex Novice
27. januar 2004 - 16:01 #8
Jeg bruger den selv hos B-one - ingen problemer...
Avatar billede googolplex Novice
27. januar 2004 - 16:07 #9
Du kan finde artiklen her, jeg kan desværre ikke huske hvilket nummer jeg fandt scriptet i :(

http://www.phparch.com/
Avatar billede googolplex Novice
27. januar 2004 - 16:08 #10
Har du fået det til at funke, siden du har accepteret ?
Avatar billede dennism Nybegynder
27. januar 2004 - 16:16 #11
Ja, det er blot på min local-server det ikke virker.
Avatar billede dennism Nybegynder
27. januar 2004 - 16:48 #12
Har fundet en fejl i den kode.

Når jeg kører koden på nogle maskiner som ikke har nogle sessions registreret så kommer denne fejlside:
___________
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, support@b-one.net and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.
_________

Hvis jeg kører den fra min computer som har en session på serveren, så virker det fint.

Hvordan kan det være, og hvordan ændrer jeg på det?
Avatar billede dennism Nybegynder
27. januar 2004 - 16:51 #13
Har fundet frem til at det er "unset($GLOBALS[$key]);" der skaber fejlen!?
Avatar billede dennism Nybegynder
27. januar 2004 - 18:57 #14
Jeg smider 100 point for et svar på dette!
Kan I ik hjælpe?
Avatar billede fangel Nybegynder
27. januar 2004 - 19:02 #15
googolplex -> PHP|Architect - Januar 2003 mener jeg...

dennism -> hvorfor prøve at (re)define en $_GET variabel? kan du lave et dump af de to (forskellige?) phpinfo() filer (for lokal og b-one) så vi kan se om der er noget åbenlyst i opsætning der spærer for det...

Morten
Avatar billede dennism Nybegynder
27. januar 2004 - 19:03 #16
Og hvis der så er!? Så kan jeg jo ikke gå ind og ændre på b-one opsætning!?..
Avatar billede fangel Nybegynder
27. januar 2004 - 19:10 #17
nej, men så har du da en forklaring (og kan skæde b-one ud...) (desuden virkede det jo ik på din lokale...)

Morten
Avatar billede dennism Nybegynder
27. januar 2004 - 19:20 #18
googolplex >>

Kan du fortælle mig hvad der er galt med min kode?
Avatar billede dennism Nybegynder
27. januar 2004 - 19:23 #19
dea_pg >>

Hvad vil du tro, at den funktion jeg skal lade efter hedder?
Avatar billede dennism Nybegynder
27. januar 2004 - 19:24 #20
Kom selv i tanke om det.. Det er register_globals.

Det er ik noget med kan slå fra i en htaccess, vel?
Avatar billede fangel Nybegynder
27. januar 2004 - 19:32 #21
jo det kan det...

php_value register_globals on|off

også læs om det på http://php.net/ini_set

Morten
Avatar billede fangel Nybegynder
27. januar 2004 - 19:33 #22
det skal nok være 0|1 istedet for off|on

Morten
Avatar billede dennism Nybegynder
27. januar 2004 - 20:05 #23
Skal det indsættes i toppen af mit dokument?
Avatar billede fangel Nybegynder
27. januar 2004 - 20:07 #24
det skal være i en fil ved navn .htaccess i dit rod bibliotek (og måske i undermappe, ved det ik lige)

Morten
Avatar billede dennism Nybegynder
27. januar 2004 - 20:11 #25
Det er gjort.
Og filen indeholder:
php_value register_globals 0

Men se nu hvilken effekt det har på min side:
http://www.dgkom.dk
Avatar billede fangel Nybegynder
27. januar 2004 - 20:14 #26
hmm... interesant... det er nok b-one der må tag den... (bare fjern filen igen, hvis du kan se den... ellers så overskriv den med en tom fil)

Morten
Avatar billede dennism Nybegynder
28. januar 2004 - 17:36 #27
dea_pg >>

B-one siger at man ikke har mulighed for at slå dette til.
Hvad kan jeg så gøre?
Avatar billede dennism Nybegynder
28. januar 2004 - 17:36 #28
Slå det fra, even.
Avatar billede dennism Nybegynder
28. januar 2004 - 18:57 #29
googolplex & dea_pg >>

Kan det godt passe at den funktion (unregister_globals();) laver problemer når man skal unregistrere en session?
Det kan jeg nemlig ikke, efter at jeg har taget denne funktion i brug!
Avatar billede dennism Nybegynder
02. februar 2004 - 15:52 #30
Når jeg bruger sessions på min side, så går siden ned, hvis jeg kører funktionen (unregister_globals). Hvordan kan det være?
Avatar billede googolplex Novice
02. februar 2004 - 16:07 #31
Hmm, jeg har aldrig haft problemer med den, men kan heller ikke huske om jeg har brugt den sammen med sessions :(

Jeg har ikke længere den artikel fra PHP|architect - kunne være sjovt at se original-koden.
Avatar billede dennism Nybegynder
02. februar 2004 - 16:14 #32
Kan du hjælpe mig med at skaffe original-koden, eller evt. finde fejlen i min kode?

Har nemlig ret store problemer, fordi min kode er skrevet til "register_globals=off", hvor b-one's webservere kører med on. Desuden synes jeg godt om at variablerne ikke bliver registreret globals, så er faktisk stor modstander af at b-one ikke giver mulighed for at man kan slå det fra.

Giver gerne 200point (vist max. grænsen, har kan desværre ik give mere) for en løsning på mit problem.
Avatar billede googolplex Novice
02. februar 2004 - 16:28 #33
Jeg prøver lige at finde original-koden...

Langt de fleste webhoteller kører desværre med register_globals On - ellers holder en langt række scripts op med at fungere og så får de en hulens bøvl fra folk der klager - SUK!
Avatar billede dennism Nybegynder
02. februar 2004 - 16:31 #34
Jah, kan sagtens se det fra den vinkel!

Men de giver heller ik engang adgang til at selv at vælge det i en .htaccess. Jeg kan ikke se hvad det kan skade!?
Avatar billede googolplex Novice
02. februar 2004 - 17:15 #35
Jeg kan faktisk slet ikke se det fra den vinkel, det er da håbløst bare at slå r_g til fordi folk ikke gider/kan finde ud af at rette deres scripts :(

Den artikel hvor koden ligger er kodet og jeg kan ikke finde kodeordet, måske dea_pg har den ?

Jeg oprettede selv et spørgsmål angående funktionen for noget tid siden, måske du kan bruge den.
Avatar billede googolplex Novice
02. februar 2004 - 17:15 #36
Avatar billede fangel Nybegynder
02. februar 2004 - 17:28 #37
unregister_globals () {
  $REQUEST = $_REQUEST;
  $GET = $_GET;
  $POST = $_POST;
  $COOKIE = $_COOKIE;
  if ( isset ( $_SESSION ) ) {
    $SESSION = $_SESSION;
  }
  $FILES = $_FILES;
  $ENV = $_ENV;
  $SERVER = $_SERVER;
  foreach (
    $GLOBALS as $key => $value ) {
    if ( $key !=  GLOBALS  ) {
      unset ( $GLOBALS [ $key ] );
    }
  }
  $_REQUEST = $REQUEST;
  $_GET = $GET;
  $_POST = $POST;
  $_COOKIE = $COOKIE;
  if ( isset ( $SESSION ) ) {
    $_SESSION = $SESSION;
  }
  $_FILES = $FILES;
  $_ENV = $ENV;
  $_SERVER = $SERVER;
}
unregister_globals ();

det er den orig. kode fra magasinet...

Morten
Avatar billede dennism Nybegynder
02. februar 2004 - 17:45 #38
dea_pg >>

Med den kode får jeg følgende fejl:
Parse error: parse error, unexpected '{' in ___.php on line 2

line 2 er:
unregister_globals () {


Hvad kan dette skyldes?
Avatar billede fangel Nybegynder
02. februar 2004 - 18:14 #39
du skal lige skrive function foran... har fået copy-pastet forkert

altså

function unregister_globals(){

Morten
Avatar billede googolplex Novice
02. februar 2004 - 18:21 #40
Men så vidt jeg kan se, er de to koder identiske, der er flyttet lidt på et par ting og kodestilen er ændret. Det burde ikke have nogen effekt.
Avatar billede fangel Nybegynder
02. februar 2004 - 18:23 #41
nææ...
Avatar billede dennism Nybegynder
02. februar 2004 - 18:27 #42
Aargh.. Hvad søren kan jeg så gøre? :'(
Avatar billede googolplex Novice
03. februar 2004 - 15:31 #43
Kan det evt. have noget at gøre med rækkefølgen du bruger følgende:

session_start();
unregister_globals();

?
Avatar billede dennism Nybegynder
03. februar 2004 - 15:35 #44
Nej, første linie i min kode er en session_start!
Avatar billede googolplex Novice
03. februar 2004 - 15:54 #45
Ja, men så prøv lige at sæt funktionen øverst og session_start(), det har jeg :)
Avatar billede googolplex Novice
03. februar 2004 - 15:54 #46
Altså:

unregister_globals();
session_start();

Mon ikke det er derfor?
Avatar billede dennism Nybegynder
03. februar 2004 - 15:57 #47
Nej, det giver desværre også problemer.

Jeg har dog fået en anden løsning, i et andet spørgsmål:
ini_set('register_globals' ,'0');
Avatar billede googolplex Novice
03. februar 2004 - 16:04 #48
Ja, så godt dit spørgsmål :)

Fatter dog ikke det virker, det burde det ikke...weird :P
Avatar billede dennism Nybegynder
03. februar 2004 - 16:10 #49
Nu forstår jeg ingen ting.

Jeg har denne kode:
$_GET[test] = "hej";
echo"test: $test";

Som ligger her:
http://www.dgkom.dk/test2.php

Som du kan se, så burde den skrive "hej", eftersom "register_globals = on" på webserveren.

Men hvorfor gør den nu ikke det?
Avatar billede googolplex Novice
03. februar 2004 - 16:16 #50
Jamen, har du ikke lige ændret det i ini_set() ?

Huske forresten at skriv:

$_GET['test'] - IKKE $_GET[test]

Det sidste virker kun vha. magi og er ikke god PHP :)
Avatar billede dennism Nybegynder
03. februar 2004 - 16:17 #51
Har selv fundet problemet i det. Jeg har nu lavet følgende test-side, for at teste den anden funktion:
_______________________________________________________________
<?
function unregister_globals () {
  $REQUEST = $_REQUEST;
  $GET = $_GET;
  $POST = $_POST;
  $COOKIE = $_COOKIE;
  if ( isset ( $_SESSION ) ) {
    $SESSION = $_SESSION;
  }
  $FILES = $_FILES;
  $ENV = $_ENV;
  $SERVER = $_SERVER;
  foreach (
    $GLOBALS as $key => $value ) {
    if ( $key !=  GLOBALS  ) {
      unset ( $GLOBALS [ $key ] );
    }
  }
  $_REQUEST = $REQUEST;
  $_GET = $GET;
  $_POST = $POST;
  $_COOKIE = $COOKIE;
  if ( isset ( $SESSION ) ) {
    $_SESSION = $SESSION;
  }
  $_FILES = $FILES;
  $_ENV = $ENV;
  $_SERVER = $SERVER;
}
unregister_globals ();
session_start();

session_register("test");
$_SESSION[test] = "blablabla";
session_unregister("test");

echo"test: $test";
?>
_______________________________________________________________

Hvad mere kan jeg gøre, for at teste om koden virker sammen med sessions?
Avatar billede dennism Nybegynder
03. februar 2004 - 16:21 #52
Prøvede forresten med denne kode:
ini_set('register_globals' ,'0');
echo"test: $test";

Og kører siden sådan: test.php?test=hej

Der stod så "test: hej" i browsen, så dermed er det konstateret at ini_set ikke virker. Ik sandt?
Avatar billede googolplex Novice
03. februar 2004 - 17:05 #53
Jep, og det bør det heller ikke :)

Brug .htaccess, det er sidste mulighed.
Avatar billede fangel Nybegynder
03. februar 2004 - 17:27 #54
ini_set kan ikke ændre register_globals... dette fremgår af tabellen vidst i manualen under ini_set()

kun i .ini filen, eller med .htaccess

Morten
Avatar billede googolplex Novice
03. februar 2004 - 18:26 #55
.htaccess med:

php_flag register_globals off

Virker fint hos www.surftown.dk, men hos www.b-one.nu får jeg en 'Internal Server Error'.

Enten er det mig der gør noget forkert eller også er det umuligt at ændre register_globals til off hos b-one...
Avatar billede dennism Nybegynder
03. februar 2004 - 19:58 #56
Det er umuligt at ændre det hos b-one. Jeg har nemlig kontaktet dem, fordi jeg heller ik kunne få den til at virke.
De siger at det er af sikkerhedsmæssige årsager!? :(
Men så vidt jeg kan se, så er det da farligt at lade den stå på on! Folks koder blir' jo nemmere at skyde sig igennem.

Hvad med scripet? Se lige min kommentar 16:17:25.
Avatar billede googolplex Novice
03. februar 2004 - 20:08 #57
Det er jo nærmest latterligt når de påstår det er pga. af sikkerhed LOL. Nå, men jeg har forladt B-one, bruger det kun indtil det udløber som test-site.

Du skal ikke bruge session_register(), det er gammeldags :)

Brug:

unregister_globals();
session_start();
$_SESSION['test'] = "blablabla";

Mere behøver du da ikke, måske er det derfor det ikke virker, men er ikke sikker.
Avatar billede fangel Nybegynder
03. februar 2004 - 20:09 #58
du har ret - det bliver mere usikkert at køre scriptene

<ironisk> men mere sikkert fro B-One da de ikke modtager brok fra kunder der ikke kan få ders hentede lorte-scripts til at virke... ;) </ironisk>

Morten
Avatar billede googolplex Novice
03. februar 2004 - 20:18 #59
Morten:

Jeg har testet .htaccess hos www.surftown.dk, men kun med GET. Hvis det virker her kan jeg så gå ud fra, at det virker for resten ? Hvordan tester jeg det ellers for alle globale ?
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