Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[PHP]include_once en verwerkingsproblemen

Pagina: 1
Acties:

Onderwerpen


  • whodares
  • Registratie: Februari 2009
  • Laatst online: 26-11-2023
Beste Tweakers

Ik ben nu in mijn vrije tijd een browsergame aan het maken in php. Ik heb nu echter weinig ervaring met php. Kheb het wel een tijdje op school gehad, maar nu probeer ik dus ook dingen die buiten de leerstof vallen.

mijn mappenstructuur is als volgt:

classes->BL,CRUD,DAL
content->de echte inhoud van mijn pagina's
css->overduidelijk mijn css-files
images->foto's voor op de site te gebruiken (banner/gewone foto's,..)
include->config,functions,javascript,...

index.php
access.php
etc...


De situering van het probleem:

In mijn index.php doe ik
code:
1
include_once("content/team.php")


Die linkt perfect door op elke pagina, werkt dus perfect.

Nu wil ik in team.php verwijzen naar mijn classes/BLSpecialFighter

Na een tijdje gezocht te hebben, kwam ik er op uit dat ik dan het volgende moest doen:
code:
1
include_once("BLSpecialFighter");

Dat werkt dus.

Dit is dus de setting waar het probleem zich afspeelt. Ik probeer dan in mijn team.php het volgende te doen:

code:
1
$blspecialFighter = new BLSpecialFighter();


Daar loopt hij vast. Alles dat er dan onder komt in de index.php wordt niet uitgevoerd enzo.
Nu zit ik hier al echt een lange tijd op te zoeken op google en ik kan er precies niets over vinden.

Hopelijk komen we er samen uit.

Met vriendelijke groeten
whodares

BNet tag: whodares#1162


  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 12:07
include_once("Classname"); zal niet werken, tenzij het bestand ook echt bestaat. Zie daarvoor ook de handleiding:
Files are included based on the file path given or, if none is given, the include_path specified.
@ PHP: include - Manual

Wat ik je verder wil adviseren is Programming FAQ - PHP # Ik kan de fout echt niet vinden! even door te lezen. :)

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 12:38

MueR

Admin Devschuur® & Discord

is niet lief

Je bent ergens tegen een voorbeeld van autoloading aangelopen. In veel gevallen is dat niet the way to go. Je kan beter gewoon je classes netjes van tevoren includen. Daarbij wil je eigenlijk ook require_once gebruiken, niet include.

Anyone who gets in between me and my morning coffee should be insecure.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Het feit dat die include_once geen melding geeft dat er iets fout gaat betekent trouwens dat je notices uit hebt staan op je developmentserver. Doe eens netjes in php.ini display_errors aanzetten en error_reporting op zijn minst op E_ALL zetten. :) Dat geldt uiteraard alleen voor developmentservers trouwens.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • whodares
  • Registratie: Februari 2009
  • Laatst online: 26-11-2023
@Manuel

Die include werkt. Het bestand bestaat en hij kan het vinden. Die FAQ heb ik al bekeken, ik kon mijn antwoord er niet in vinden. Hoe ik die error checking moet opzetten, zou ik niet weten. Ik heb nog nooit zoiets moeten doen.

@MueR
Hier kan ik niet goed aan uit om eerlijk te zijn. Met slechts een half jaartje php op school gehad te hebben, sta ik nog niet ver. require_once hebben we zelfs niet gezien.

Ik denk dat je het volgende bedoelt (correct me if I'm wrong):
Mijn file geeft enkel de error zodra ik
code:
1
$blspecialFighter = new BLSpecialFighter();
doe. Wat ik gemerkt heb, is het volgende: als ik even wacht op mijn netbeans voor het volledig zelf in te typen, dan zie ik dat het pad naar mijn BLSpecialFighter nog steeds classes/BLSpecialFighter is.

Na het te hebben getest, doet hij nog minder als ik require_once gebruik. Dit heb ik getest met zowel naar de classes te verwijzen als niet ernaar te verwijzen.

Sorry als ik onduidelijk ben, ik ben echt nog nieuw hierin :s

@NMe

Ik denk niet dat ik op een developmentserver zit. Dit is gewoon een gratis .co.cc domeintje waar ik op het testen ben :P

BNet tag: whodares#1162


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Dan wordt het hoog tijd dat je op je eigen pc even een servertje installeert, op een productieserver kun je niet naar behoren testen. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
whodares schreef op woensdag 27 juli 2011 @ 17:43:
Na een tijdje gezocht te hebben, kwam ik er op uit dat ik dan het volgende moest doen:
code:
1
include_once("BLSpecialFighter");
Wat Manuel zegt is: Heet je bestand BLSpecialFighter of BLSpecialFighter.php ?

[ Voor 28% gewijzigd door RobIII op 27-07-2011 18:53 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • whodares
  • Registratie: Februari 2009
  • Laatst online: 26-11-2023
het bestand BLSpecialFighter.php staat in de map classes.
Op dezelfde hoogte als deze map staan ook de map content en het bestand index.php
in de map content zit het bestand team.php

Alles dat ik aanroep bestaat echt.

@NMe

Een thuisserver installeren klinkt al vrij grootschalig als ik het zo hoor. Ik heb hier ook absoluut nul ervaring mee, dus ik denk dat ik dan nog verder van huis zit :s

Tot nu toe al bedankt voor de hulp, ik appreciëer het enorm :)


EDIT: was ik er vergeten bij te zetten. Als ik dit probeer in een bestand in mijn content-map, dan werkt dit dus prima.

Hiermee bedoel ik dus
code:
1
2
include_once("classes/BLSpecialFighter.php");
$blspecialFighter = new BLSpecialFighter();


Ik gebruik nu classes/BLSpecialFighter omdat ik nu niet meer via de index.php werk.

Ik kan dan ook perfect alles uitlezen uit mijn database, dus ik vermoed dat het probleem is dat ik begin uit index.php en dat het path naar mijn bestand verkeerd uitgelezen wordt.

[ Voor 36% gewijzigd door whodares op 27-07-2011 18:59 ]

BNet tag: whodares#1162


  • alex3305
  • Registratie: Januari 2004
  • Laatst online: 12:13

Niet geheel off-topic maar misschien toch belangrijk.

Allereerst hoef je bij include (en include_once, require, require_once en echo (en nog wat andere)) geen haakjes te gebruiken. Ten tweede kun je beter enkele apostrophes gebruiken dan aanhalingstekens, vanwege eventuele escape characters. Voorbeeld:


PHP:
1
include 'foo.php';

is beter dan:
PHP:
1
include("foo.php");

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:36

.oisyn

Moderator Devschuur®

Demotivational Speaker

Escape characters in filenames? 8)7
En single quotes hebben óók escapechars (namelijk \\ en \')

[ Voor 46% gewijzigd door .oisyn op 27-07-2011 19:07 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:36

.oisyn

Moderator Devschuur®

Demotivational Speaker

whodares schreef op woensdag 27 juli 2011 @ 17:43:


Na een tijdje gezocht te hebben, kwam ik er op uit dat ik dan het volgende moest doen:
code:
1
include_once("BLSpecialFighter");

Dat werkt dus.
Natuurlijk "werkt" dat, al je errors heb je uitstaan, en je gebruikt include ipv require.
http://www.php.net/manual/en/function.require.php

Als je een file wilt includen dan moet je áltijd de volledige bestandsnaam gebruiken, een daarnaast rekening houden met het include path.
Files are included based on the file path given or, if none is given, the include_path specified. If the file isn't found in the include_path, include() will finally check in the calling script's own directory and the current working directory before failing. The include() construct will emit a warning if it cannot find a file; this is different behavior from require(), which will emit a fatal error.
Met andere woorden, als je vanuit /index.php begint dan zal het includen van dir1/foo.php best lukken vanuit /dir2/bar.php, omdat er ook wordt gezocht vanuit de dir van het aanroepende script. Maar beter include je ../dir1/foo.php, dan werkt het altijd.

Verder: http://www.php.net/manual/en/function.error-reporting.php
PHP:
1
error_reporting(E_ALL);

[ Voor 10% gewijzigd door .oisyn op 27-07-2011 20:01 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • whodares
  • Registratie: Februari 2009
  • Laatst online: 26-11-2023
Dat is even hier een foutje van mij. Was vergeten de .php erachter te zetten. In mijn toepassing stond deze er wel al achter.

Is er een manier om een path te veranderen voor een bestand voor enkel het bestand waarin het gebruikt wordt?

Hiermee bedoel ik dus het volgende:

mijn BLSpecialFighter.php staat in de map classes -> path automatisch op classes/BLSpecialFighter.php

Nu moest ik (omdat ik in een include in de index.php werk) slechts include_once("BLSpecialFighter.php") doen.

Als ik dan $blspecialFighter = new BLSpecialFighter(); wil doen, dan staat het path van BLSpecialfighter nog steeds via de classes. Ik denk dus dat hier de fout zit.

Van die require weet ik eerlijk gezegd niets af en als ik iets probeer, dan werkt het nog slechter dan wat ik nu heb.


EDIT: om het even duidelijk te maken, mijn fout zit niet bij het includen van het bestand. Mijn fout zit bij het gebruiken na de include; nl
code:
1
$blspecialFighter = new BLSpecialFighter();

[ Voor 11% gewijzigd door whodares op 27-07-2011 20:03 ]

BNet tag: whodares#1162


  • Cartman!
  • Registratie: April 2000
  • Niet online
En wat wij je proberen duidelijk te maken is dat die include waarschijnlijk al helemaal niet werkt maar dat zie je niet omdat er mogelijk geen goede error_reporting aanstaat. Verander de "include_once" eens met "require_once".

Met de functie set_include_path() kun je veranderen waarin PHP gaat zoeken naar de includes/requires, misschien heb je daar iets aan :)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:36

.oisyn

Moderator Devschuur®

Demotivational Speaker

Als je nou ewoon even goed leest wat wij te zeggen hebben ipv overtuigd te zijn van je eigen gelijk :).

De reden dat je dénkt dat de fout daar zit is omdat de class niet gedefiniëerd is omdat die php file niet correct is geïnclude (zet er maar eens een echo in, je zult zien dat hij niet wordt uitgevoerd).

Maar begin allereerst met het aanzetten van error reporting door die functieaanroep bovenaan te zetten in je script.

[ Voor 66% gewijzigd door .oisyn op 27-07-2011 20:35 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • MueR
  • Registratie: Januari 2004
  • Laatst online: 12:38

MueR

Admin Devschuur® & Discord

is niet lief

.oisyn schreef op woensdag 27 juli 2011 @ 19:24:
Met andere woorden, als je vanuit /index.php begint dan zal het includen van dir1/foo.php best lukken vanuit /dir2/bar.php, omdat er ook wordt gezocht vanuit de dir van het aanroepende script. Maar beter include je ../dir1/foo.php, dan werkt het altijd.
Beter doe je in je index.php dit:
PHP:
1
define('ROOT_PATH', dirname(__FILE__) . '/');

en roep je andere bestanden aan via
PHP:
1
require_once ROOT_PATH . 'classes/foo.php';

Als je het dan nog helemaal makkelijk wil maken doe je meerdere defines op die manier, om shortcuts naar diverse mappen (classes bijvoorbeeld) te maken.

Anyone who gets in between me and my morning coffee should be insecure.


  • whodares
  • Registratie: Februari 2009
  • Laatst online: 26-11-2023
Ok, dit gaat een lange post worden met alle resultaten.

in mijn index.php:
code:
1
2
3
<div id="team">
            <?php include_once("content/team.php"); ?>
</div>


in mijn team.php:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
include_once("/classes/BLSpecialFighter.php");


//$blfighterPerTeam = new BLFighterPerTeam();
//$blfighter = new BLFighter();
//$blspecialFighter = new BLSpecialFighter();

//express in commentaar om resultaatverschil te tonen.

if (isset($_SESSION["playerId"])) {

    $team .= '<tr><td width="75"><img src="images/cc_normal.png" alt="banner" /></td><td>
        <table>
            <tr>
                <td>Str: 100</td>
                <td>Int: 100</td>
            </tr>
 
           <tr>
                <td>Res: 20</td>
                <td>Sta: 50</td>
            </tr>
        </table>
        </td></tr>';

}


Dit geeft het volgende resultaat:

Afbeeldingslocatie: http://img823.imageshack.us/img823/2577/probleemimage.png

Hij doet dus wat hij moet doen (enkel een include, verder niets)

Nu verander ik de code in team.php naar het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
include_once("/classes/BLSpecialFighter.php");


//$blfighterPerTeam = new BLFighterPerTeam();
//$blfighter = new BLFighter();
$blspecialFighter = new BLSpecialFighter();

//express in commentaar om resultaatverschil te tonen. -> nu heb ik het onderste uit commentaar gehaald. Dit gebruik ik om dan aan mijn database aan te kunnen

if (isset($_SESSION["playerId"])) {

    $team .= '<tr><td width="75"><img src="images/cc_normal.png" alt="banner" /></td><td>
        <table>
            <tr>
                <td>Str: 100</td>
                <td>Int: 100</td>
            </tr>
 
           <tr>
                <td>Res: 20</td>
                <td>Sta: 50</td>
            </tr>
        </table>
        </td></tr>';

}


resultaat:
Afbeeldingslocatie: http://img683.imageshack.us/img683/6035/probleemimage2.png

Zoals je kan zien, doet hij nu niets meer, hij toont geen php-code meer na hetgene dat ik uit commentaar gehaald heb.

Als ik in index.php de include_once door require_once verander, dan blijft het resultaat voor beide gevallen hetzelfde.

Dan nu de resultaten van team.php:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
require_once("./classes/BLSpecialFighter.php");


//$blfighterPerTeam = new BLFighterPerTeam();
//$blfighter = new BLFighter();
$blspecialFighter = new BLSpecialFighter();
if (isset($_SESSION["playerId"])) {

    $team .= '<tr><td width="75"><img src="images/cc_normal.png" alt="banner" /></td><td>
        <table>
            <tr>
                <td>Str: 100</td>
                <td>Int: 100</td>
            </tr>
 
           <tr>
                <td>Res: 20</td>
                <td>Sta: 50</td>
            </tr>
        </table>
        </td></tr>';

}


resultaat:
Afbeeldingslocatie: http://img828.imageshack.us/img828/8818/probleemimage3.png

Hier toont hij nog de php-code van team.php, maar de daaropvolgende php-code kan ik vergeten.

en dan nu de laatste test in team.php:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
//include_once("BLFighterPerTeam.php");
//include_once("BLFighter.php");



require_once("./classes/BLSpecialFighter.php");


//$blfighterPerTeam = new BLFighterPerTeam();
//$blfighter = new BLFighter();
//$blspecialFighter = new BLSpecialFighter();


$team = "<table>";

if (isset($_SESSION["playerId"])) {

    $team .= '<tr><td width="75"><img src="images/cc_normal.png" alt="banner" /></td><td>
        <table>
            <tr>
                <td>Str: 100</td>
                <td>Int: 100</td>
            </tr>
 
           <tr>
                <td>Res: 20</td>
                <td>Sta: 50</td>
            </tr>
        </table>
        </td></tr>';

}

$team .= "</table>";
?>

<?php echo $team; ?>


resultaat:
exact hetzelfde als het voorgaande.


Dit is dus mijn situatie.
Nu zal ik wat berichten gemist hebben terwijl ik dit typte, dus die lees ik dan door en dan zal ik deze post editen.

EDIT1: @oisyn: ik heb die error checking overal vanboven gezet om te testen, ik kreeg nergens een error te zien. Ik heb zelfs ctrl+u gedaan om zeker te zijn dat het niet in de broncode zou komen

EDIT2: @Cartman en MueR
Jullie raden me dus aan om de root path te veranderen. Welke van jullie manieren is nu het beste? Persoonlijk denk ik die van MueR, omdat hij het zelf zegt, maar ik ben er absoluut niet zeker van.

[ Voor 5% gewijzigd door whodares op 27-07-2011 20:56 ]

BNet tag: whodares#1162


  • Cartman!
  • Registratie: April 2000
  • Niet online
Staat je ERROR_REPORTING nu al aan? En maak van die INCLUDE_once nu eens REQUIRE_once, als dat geen foutmeldingen geeft weet je zeker dat je het goede zit te debuggen.

Ik gebruik beiden methoden door elkaar omdat ik Zend Framework gebruik waarbij je het pad van includes moet instellen op je library map. Als je dat verder niet hebt raad ik MueR zijn oplossing aan.

  • whodares
  • Registratie: Februari 2009
  • Laatst online: 26-11-2023
Cartman! schreef op woensdag 27 juli 2011 @ 21:19:
Staat je ERROR_REPORTING nu al aan? En maak van die INCLUDE_once nu eens REQUIRE_once, als dat geen foutmeldingen geeft weet je zeker dat je het goede zit te debuggen.

Ik gebruik beiden methoden door elkaar omdat ik Zend Framework gebruik waarbij je het pad van includes moet instellen op je library map. Als je dat verder niet hebt raad ik MueR zijn oplossing aan.
Heb je mijn vorige post gelezen?
Ik heb stap voor stap elke include door een require veranderd en de bekomen resultaten in een screenshot erbij gezet.

Die
code:
1
2
3
<?php
error_reporting(E_ALL);
?>


heb ik ook overal vanboven gezet en ik kreeg nog geen errormessages. En als ik overal zeg, dan bedoel ik ook overal.

BNet tag: whodares#1162


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Domme vraag, maar vergeet je niet zo nu en dan te uploaden ofzo als al je wijzigingen geen (of een vaag) effect hebben :?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Cartman/rob, het kan ook gewoon dat display_errors uit staat uit. ;)

=> Zet tijdens het devven een ini_set('display_errors', true); bovenin je script. :)
MueR schreef op woensdag 27 juli 2011 @ 18:24:
Je bent ergens tegen een voorbeeld van autoloading aangelopen. In veel gevallen is dat niet the way to go.
offtopic:
Hmz. Voorlopig is het wellicht te geavanceerd voor de ts, maar ik ben het zeker niet eens met deze uitspraak. Voor de iets grotere programma's zou imo autolading juist verplicht moeten zijn en geldt een waslijst require_onces boven elke file als slechte code style.

[ Voor 64% gewijzigd door Voutloos op 27-07-2011 22:12 ]

{signature}


  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 26-11 20:53

Ventieldopje

I'm not your pal, mate!

Gewoon Zend Server Community Edition (gratis) installeren en je script lokaal draaien, heb je ook geen problemen met het vergeten te uploaden enzo plus je kunt gebruik maken van debugging extensions zoals xdebug en unit tests ;)

Bovendien grote kans dat je geen ini_set kan gebruiken op een productie server ;)

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


  • whodares
  • Registratie: Februari 2009
  • Laatst online: 26-11-2023
Voutloos schreef op woensdag 27 juli 2011 @ 22:09:
Cartman/rob, het kan ook gewoon dat display_errors uit staat uit. ;)

=> Zet tijdens het devven een ini_set('display_errors', true); bovenin je script. :)
haha, dit heeft het dus gedaan. Op school stond dit dan op de server aan en hier kan dit dus blijkbaar ook.

Momenteel krijg ik deze error:

Fatal error: Cannot redeclare connect() in /home/vol2/lockernerd.co.uk/lnw_8545554/ecchimanager.co.cc/htdocs/include/functions.php on line 5

Die krijg ik als ik volgende code gebruik:

code:
1
2
3
4
5
require_once("./classes/BLSpecialFighter.php");

of

require_once("classes/BLSpecialFighter.php");


de andere error die ik krijg is de volgende:

Warning: require_once(/classes/BLSpecialFighter.php) [function.require-once]: failed to open stream: No such file or directory in /home/vol2/lockernerd.co.uk/lnw_8545554/ecchimanager.co.cc/htdocs/content/team.php on line 9

Fatal error: require_once() [function.require]: Failed opening required '/classes/BLSpecialFighter.php' (include_path='.') in /home/vol2/lockernerd.co.uk/lnw_8545554/ecchimanager.co.cc/htdocs/content/team.php on line 9

die krijg ik bij volgende code:
code:
1
require_once("/classes/BLSpecialFighter.php");


eerste error weet ik niet goed, tweede zal een verkeerd path zijn (denk ik)

BNet tag: whodares#1162


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:36

.oisyn

Moderator Devschuur®

Demotivational Speaker

MueR schreef op woensdag 27 juli 2011 @ 20:44:
[...]

Beter doe je in je index.php dit:
Beter ben je gewoon onafhankelijk van waarvandaan je file geïnclude wordt. Wat als je index.php nou niet je common entry point is? Relatieve paden kloppen altijd.
whodares schreef op woensdag 27 juli 2011 @ 22:15:
die krijg ik bij volgende code:
code:
1
require_once("/classes/BLSpecialFighter.php");


eerste error weet ik niet goed, tweede zal een verkeerd path zijn (denk ik)
Dat lijkt me logisch, een pad dat begint met / is een absoluut pad (en verwijst dus naar de root van je filesystem)

[ Voor 39% gewijzigd door .oisyn op 27-07-2011 22:32 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Je declareert meerdere malen een connect() functie.

Hint als je mn gruwelijke skills wilt evenaren: Bovenstaande is een letterlijke vertaling. :>

{signature}


  • whodares
  • Registratie: Februari 2009
  • Laatst online: 26-11-2023
Voutloos schreef op woensdag 27 juli 2011 @ 22:29:
Je declareert meerdere malen een connect() functie.

Hint als je mn gruwelijke skills wilt evenaren: Bovenstaande is een letterlijke vertaling. :>
Dat is het nu net. Ik heb slechts 1 keer een connect() gemaakt (nl in functions.php)
Dan heb ik functions.php vanboven in mijn index geinclude dat die bij elke pagina inzit. Waarom hij nu opeens lastig doet, snap ik niet.

Als ik de functie in commentaar zet, dan zegt hij dat de functie niet gedeclareerd is.

BNet tag: whodares#1162


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Dan doe je ergens een include of require (ipv include_once en require_once), waardoor je de file vaker in laadt. ;)

Lees aub nog eens rusig wat na over het includen van files. En je mag niet binnen een paar minuten reageren, want dan lees je niet grondig genoeg. ;)

{signature}


  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
.oisyn schreef op woensdag 27 juli 2011 @ 22:29:
[...]
Relatieve paden kloppen altijd.
Zolang ze vanaf hetzelfde beginnivo komen...
Absolute paden kloppen altijd :)

Heel vroeger vaak genoeg problemen mee gehad, project-opzetje uitdenken. Dan relatieve paden gebruiken, werkt perfect... Totdat ik 3 maanden even een extra onderdeeltje eraan wil hangen waar ik in de 1e opzet geen dir voor heb gemaakt, ach dan gingen we toch voor een subdir ergens anders onder... Oeps, daar gaat de altijd...

  • whodares
  • Registratie: Februari 2009
  • Laatst online: 26-11-2023
Bedankt, ik deed inderdaad ergens include in plaats van include_once. Stomme fout van me :P

Nu ga ik zeker ook eens kijken naar die paden herinstellen, maar daar heb ik nu spijtig genoeg geen tijd voor. Morgen zal ik al vroeg genoeg op moeten zijn voor mij :(

Bedankt voor de hulp allemaal, dit is heel erg geappreciëerd :)

BNet tag: whodares#1162


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:36

.oisyn

Moderator Devschuur®

Demotivational Speaker

Gomez12 schreef op woensdag 27 juli 2011 @ 22:47:
[...]

Zolang ze vanaf hetzelfde beginnivo komen...
Nonsens:
If the file isn't found in the include_path, include() will finally check in the calling script's own directory and the current working directory before failing.
Oftewel, paden relatief aan je huidige file zijn altijd goed, onafhankelijk van de current dir, waar je script vandaan geinclude wordt of wat de include_path is.
Sterker nog:
If a path is defined — whether absolute (starting with a drive letter or \ on Windows, or / on Unix/Linux systems) or relative to the current directory (starting with . or ..) — the include_path will be ignored altogether. For example, if a filename begins with ../, the parser will look in the parent directory to find the requested file.
Absolute paden kloppen altijd :)
Tot je je webroot naar een andere dir verhuist. Ergo, nee dus.
Heel vroeger vaak genoeg problemen mee gehad, project-opzetje uitdenken. Dan relatieve paden gebruiken, werkt perfect... Totdat ik 3 maanden even een extra onderdeeltje eraan wil hangen waar ik in de 1e opzet geen dir voor heb gemaakt, ach dan gingen we toch voor een subdir ergens anders onder... Oeps, daar gaat de altijd...
Tja, als je intern dirs aan het verplaatsen bent moet je de boel aanpassen ja. Dat geldt net zo goed voor absolute paden.

[ Voor 22% gewijzigd door .oisyn op 27-07-2011 22:57 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
.oisyn schreef op woensdag 27 juli 2011 @ 22:55:
[...]
Oftewel, paden relatief aan je huidige file zijn altijd goed, onafhankelijk van de current dir, waar je script vandaan geinclude wordt of wat de include_path is.
Mijn eigen bedachte oplossing toendertijd was om in includes andere files te includen. Dat gaat toch echt fout en daar kwam ik op een gegeven moment echt mee in de knoei.
Tot je je webroot naar een andere dir verhuist. Ergo, nee dus.
Afhankelijk van hoe je absolute paden definieert...
Persoonlijk hanteer ik de methode van Muer, in het begin van het framework vogel ik in een centrale file het huidige pad waar die file staat uit, dat pad define ik. En vanaf daar werk ik met (imho) absolute paden in de vorm van define + rest van pad.

Webroot veranderen is dus enkel maar de vraag of mijn framework het dan huidige pad kan uitvogelen, zoja no problem. zonee, dan 1 define hardcoden (als het echt moet)
[...]
Tja, als je intern dirs aan het verplaatsen bent moet je de boel aanpassen ja. Dat geldt net zo goed voor absolute paden.
Persoonlijk heb ik altijd iets van "absolute" paden dan weet ik waar ik mee bezig ben, relatieve paden heb ik sneller het idee dat voor de rest werkt dus waarom nu opeens niet meer (uitgaande van een include in een include dus)

Maar waarschijnlijk meer persoonlijke voorkeur dan echt logisch :)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:36

.oisyn

Moderator Devschuur®

Demotivational Speaker

Gomez12 schreef op woensdag 27 juli 2011 @ 23:19:
[...]

Mijn eigen bedachte oplossing toendertijd was om in includes andere files te includen. Dat gaat toch echt fout en daar kwam ik op een gegeven moment echt mee in de knoei.
Het punt is dat, indien er geen pad is opgegeven, hij in de include_path en de current working dir kijkt. Oftewel, als je deze dirstructuur hebt:

/index.php
/bar.php
/foo/foo.php
/foo/bar.php

En index.php includet /foo/foo.php, die op zijn beurt "bar.php" includet, dan wordt /bar.php dus ingelezen ipv /foo/bar.php omdat / nou eenmaal de current working dir is. Dit is vrij gemakkelijk te voorkomen door "./bar.php" te includen ipv "bar.php".

Maar los van dat heeft het imho gewoon altijd goed gewerkt.

[ Voor 38% gewijzigd door .oisyn op 27-07-2011 23:32 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Cartman!
  • Registratie: April 2000
  • Niet online
Voutloos schreef op woensdag 27 juli 2011 @ 22:09:
Cartman/rob, het kan ook gewoon dat display_errors uit staat uit. ;)
Goed punt, als we t hier over error_reporting hebben weet iedereen dat dan je display_errors wel aan moet staan maar dat weet blijkbaar niet iedereen ;)

Ik heb die paden altijd in m'n bootstrap staan, dus als ik een index.php heb dan require ik de bootstrap relatief (bijv. ../application/bootstrap.php) en als ik nog een andere file heb dan require ik die ook relatief (bijv. ../../../application/boostrap.php). Dan kun je vanaf dat moment altijd je defines gebruiken (PATH_ROOT) om andere bestanden op te halen, werkt echt super lekker :)

[ Voor 36% gewijzigd door Cartman! op 28-07-2011 11:49 ]


  • MueR
  • Registratie: Januari 2004
  • Laatst online: 12:38

MueR

Admin Devschuur® & Discord

is niet lief

.oisyn schreef op woensdag 27 juli 2011 @ 22:55:
Tot je je webroot naar een andere dir verhuist. Ergo, nee dus.
En dat voorkom je dus door dirname(__FILE__) te gebruiken, die returned namelijk het absolute pad naar je huidige directory.

Anyone who gets in between me and my morning coffee should be insecure.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12:36

.oisyn

Moderator Devschuur®

Demotivational Speaker

MueR schreef op donderdag 28 juli 2011 @ 12:30:
[...]

En dat voorkom je dus door dirname(__FILE__) te gebruiken, die returned namelijk het absolute pad naar je huidige directory.
.oisyn schreef op woensdag 27 juli 2011 @ 22:29:
[...]

Wat als je index.php nou niet je common entry point is?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1