Du skal lige sikre dig, at filen electric.php bliver inkluderet.
Prøv i første omgang at droppe funktionen og inkluder filen direkte.
<?php
include( '/php/electric.php') // tjek om det url er korrekt
$obj = new Electric();
echo "test";
?>
Hvis ikke ovenstående fungerer, så prøv at sætte classen ind i samme fil - på den måde er du 100 % sikker på, at det ikke er i inkluderingen, den fejler.
"It's important to remember that __autoload will only be executed when a class doesn't exist."
Eksemplet i det link har en klasse myclass.php. Så skriver de $obj=new MyClass(), en ikke bestående klasse. Derfor træder autoload i aktion. Tricket i dette eksempel er, at autoload funktionen kalder strtolower($classname) således at new MyClass() resulterer i at myclass.php bliver inkluderet. I dit tilfælde består klassen Electric. Derfor træder autoload ikke i aktion ved $obj = new Electric();
Min teori (som kan være forkert) er, at dit program IKKE læser filen /php/electric.php.
Jeg foretog følgende test: Jeg lavede en fil jtc.php således:
<?php echo "jtc <br>"; include 'jtc1.php'; $obj = new Electric(); echo "test"; ?>
og en fil jtc1.php således:
<?php echo "jtc1 <br>"; class Electricc { public $arrScore = array(); } ?>
Når jeg så kører jtc.php får jeg dette output:
jtc jtc1 test
Altså programmet læser jtc1.php, laver new Electric(, og fortsætter med at outputte test.
Hvis jeg i jtc1.php ændrer klassens navn til Electric1, så giver programmet dette output:
jtc jtc1
Altså læser programmet jtc1, men fordi den kalder en ikke (længere) bestående klasse, så afbrydes programmet, så test ikke udskrives.
Hvis jeg ændrer jtc.php til at include jtc2.php i stedet for jtc1.php og samtidig fjerner $obj = new Electric();, så får jeg dette output:
jtc test
Programmet læser ikke (længere) siden jtc1. Derfor kommer outputtet jtc1 ikke med. Men det forstyrrer ikke i sig selv programmets videre forløb, derfor kommer outputtet test med. (Havde det været require 'jtc2.php' ville test ikke blive udskrevet.)
Hvis jeg til slut lader jtc include jtc2.php og $obj=new Electric(), så bliver outputtet
jtc
Programmet kalder en klasse der ikke består i jtc2.php (fordi jtc2 ikke består). Derfor afbrydes programmet, således at test ikke udskrives.
MIN konklusion er, at dit program ikke udskriver 'test' fordi programmet afbrydes af kald til en ikke bestående klasse, eller rettere en klasse i en ikke bestående fil.
DIN reaktion vil muligvis være, at det har jeg ikke en stand forskid på, fordi dit program helt sikkert læser filen /php/electric.php. Jeg foreslår, at du beviser dette overfor mig og dig selv ved i filen /php/electric.php at inkludere en echo, såsom:
<?php echo "DET HAR MANDEN IKKE EN STAND FORSKID PÅ! <br>"; class Electric { public $arrScore = array(); o.s.v. } ?>
Hvis du så får udskrevet dette echo, så har jeg uret. Men det er også et resultat, fordi vi så ved, at vi skal finde problemet et andet sted. Hvis du ikke får udskrevet echoet, så er problemet, hvordan det så end kan gå til, at filen /php/electric.php ikke findes! (I så fald er det nok stien der skal kikkes på en gang mere.)
Jeg værdsætter meget du har gjort meget ud af at hjælpe mig med mit problem, og håber du vil fortsætte.
men med følgende kode får jeg en intern http 500 serverfejl, hvis ikke jeg fjerner nedenstående linie fra test.php: $obj = new Electric;
Altså hvis jeg fjerner ovenstående linie får jeg en side med teksten: external class men hvis jeg beholder linien får jeg en intern http 500 serverfejl
Så du beviser, at electric.php bliver læst ved at indsætte echoen "external class", og du tilføjer yderligere oplysninger, at du får intern 500 serverfejl. Det er fremskridt. Jeg har googlet rundt og fået oplyst, at du skulle få en mere detaljeret fejlmelding hvis du, på Internet Explorer, under tools - internet options - advanced fjerner 'fluebenet' i "Show friendly HTTP error messages". Prøv engang og se hvad der sker.
Men skønt du ikke har fået løst problemet, så er du kommet frem til en mere præcis problemformulering, nemlig at når du includer electric.php, så får du internal serverfejl når du vil generere en ny Class. En mulighed er, at du lukker dette spørgsmål og opretter et nyt spørgsmål med titel "HTTP 500 Internal Server Error" eller lignende. Så får du frisk opmærksomhed fra de der har erfaring med server errors (ikke mig). Jeg vil foreslå, at du viser den kode du har i #28, at du gør opmærksom på at electric.php rent faktisk indlæses, fordi du får echoen "external class", og måske gør opmærksom på, at skønt Experten afkorter URL'en, så kalder include filen electric.php, og så naturligis giver den fulde fejlmelding du får efter at have fjernet ovenstående flueben.
Jeg har fjernet fluebenet i vis meddelser om uskadelige http fejl. Og siden viser nu ingen intern http 500 serverfejl, men alt hvad der står efter linien hvor jeg generere en variable af den pågældende class, bliver ikke udført.
men jeg får ingen fejlmelding, koden bliver bare ikke eksekveret.
Ja nu har jeg fundet løsningen på spørgsmålet med hjælp fra hanspeter2 her http://www.eksperten.dk/spm/953184#reply_7878706 Hans peter får point på dette link, men jeg her giver Christian_Belgien point for at indsnævre problemet.
Ja jeg troede /php/electric.php var nok til at refere til roden af hjemmesiden, men det var det så ikke :-(
løsningen var:
include $_SERVER['DOCUMENT_ROOT'].'/php/electric.php';
så endnu engang tak
Synes godt om
Ny brugerNybegynder
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.