Avatar billede rasmusdegnbol Nybegynder
26. maj 2005 - 17:09 Der er 12 kommentarer

PHP og windows

Hey eksperter

Jeg sidder lige og grubler over det her "lille" problem. Jeg har netop flyttet mit arbejde til serveren hvor scriptet skal køre på, men får følgende fejl.

http://www.teleaalborg.dk/forhandler/brugere.php

Det jeg ikke fatter er at den henter hele functions siden fint nok, det samme med alle mine actions.... Eneste forskel jeg lige kan se er at den server jeg kom fra var linux og nu er det en windows server der hoster, gør det nogen forskel eller hva sker der??
Avatar billede angam Nybegynder
26. maj 2005 - 17:14 #1
Fejlen skyldes højest sandsynligt at php.ini er konfigureret forskelligt, og her viser (mindre) alvorlige fejl, såsom denne:

Notice: Undefined variable: action in d:\www\teleaalborg.dk\forhandler\actions.inc.php on line 3


Det rigtige er at fidne filen og rette fejlen: på linie 3 bruger du $action, men denne er ikke defineret (endnu?).
Avatar billede angam Nybegynder
26. maj 2005 - 17:17 #2
Du kan naturligvis også ændre php.ini. Du skal lede efter parametret error_reporting - jeg gætter på at den står til E_ALL hos dig nu. Hvis du ændrer til

error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR

vil du ikke se fejlene mere.
Det er bare ikke det helt rigtige at gøre; der er jo en grund til at du får disse fejl! Det svarer til at pille olielampen ud af bilen hvis den lyser :-)
Avatar billede rasmusdegnbol Nybegynder
26. maj 2005 - 17:23 #3
serveren er ikke min egen, men fejlen er noget jeg vil henvende mig til server admin for at få rettet. Der er tale om et webhotel til 4500,- pr. år, så hvis nogen kunne komme med en mere specifik ting der skal ændres i PHP.ini eller lignende ville det være dejligt! :)
Avatar billede angam Nybegynder
26. maj 2005 - 17:26 #4
Det er som sådan ikke en fejl på serveren, men i php-filen. Serveren er blot sat op til at vise alle programfejl - også de mindre alvorlige. For at rette det, skal du (de må det vel blive) rette error_reporting sådan som jeg beskriver ovenover.

Men som sagt: det mest rigtige er at rette php-fejlen i actions.inc.php - det er næppe webhotellets skyld :-)
Avatar billede rasmusdegnbol Nybegynder
26. maj 2005 - 17:28 #5
ah okay, godt så. Så forstår jeg bare ikke hvorfor den siger fejl på den her. F.eks.

if ($action == "logout") {
        Logout();
        }

Som man kalder med feks. xxxx.php?action=logout

Hvor er min fejl og hvordan kan jeg kode det bedre?
Avatar billede angam Nybegynder
26. maj 2005 - 17:36 #6
Muligvis er register_globals sat til ON på den gamle server i php.ini også? Som default er register_globals sat til OFF.
Når register_globals er sat til ON, bliver alle parametre i querystringen omsat til variable i php (?action=10 betyder at $action er 10 i php). Er den derimod OFF, bliver variablen IKKE sat!

For at hente værdien ned kan du bruge
$action = isset($_GET['action']) ? $_GET['action'] : false;

(så er action værdien fra querystringen eller FALSE hvis der ingen findes).

Jeg kan se at $action mangler både i actions.inc.php og brugere.php - på andre sider mangler andre variable, så jeg vil anbefale at de (webhotellet) sætter register_globals = On.

Hvorfor er den så OFF spørger du så? Det er et sikkerhedsspørgsmål - ved at have den OFF er det dig og dit program der styrer hvilke variable der bliver sat - det er ikke helt så nemt at indsætte "falske" værdier for personer udefra.
Avatar billede angam Nybegynder
26. maj 2005 - 17:38 #7
> Hvor er min fejl og hvordan kan jeg kode det bedre?

Du kan kode det hele til at læse variablen fra $_GET (eller $_POST hvis du bruger POST metoden i forms eller $_REQUEST hvis du bruger begge dele); det er dog ret omstændigt at gøre dette hvis dit program er stort (og det ser unægteligt sådan ud!)
Avatar billede angam Nybegynder
26. maj 2005 - 17:41 #8
Jeg har lavet et lille HACK som du kan bruge til at teste om det vitterligt er det der er årsagen til fejlene.

Indsæt disse kodelinier øverst i brugere.php (og andre sider der fejler) og se hvad der sker:

while (list($key, $val) = @each($_GET))
    $GLOBALS[$key] = $val;
while (list($key, $val) = @each($_POST))
      $GLOBALS[$key] = $val;
while (list($key, $val) = @each($_COOKIE))
      $GLOBALS[$key] = $val;


Linierne gør det samme som hvis register_globals ville være ON.
Avatar billede rasmusdegnbol Nybegynder
26. maj 2005 - 17:43 #9
PHPINFO siger

register_globals On On...

Havde selv tænkt det samme, så forstår det ikke helt....
Avatar billede rasmusdegnbol Nybegynder
26. maj 2005 - 17:45 #10
siger stadigvæk det samme :(
Avatar billede angam Nybegynder
26. maj 2005 - 17:46 #11
Jeg er blank lige pt - vender tilbage lidt senere hvis ikke du allerede har fået svar inden da. (Det er ét af de problemer der vil drille min hjerne lidt de næste par timer!)
Avatar billede rasmusdegnbol Nybegynder
26. maj 2005 - 17:52 #12
jeg tænkte nemlig også om det var globals der var sat til OFF men det må de da ikke være siden PHP info siger noget andet, eller kan det lade sig gøre at de ikke er det på enkelte brugere?
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