[PHP] Cannot redeclare

Pagina: 1
Acties:

Onderwerpen


  • BlackWhizz
  • Registratie: September 2004
  • Laatst online: 08-12-2024
Heel gek, ik heb 3 dubbel gecontrolleerd of nergens dubbel geinclude word en dat gebeurt niet.

Maar toch krijg ik de onderstaande fout:
Fatal error: Cannot redeclare loginform() (previously declared in /admin/functions.php:6) in /admin/functions.php on line 49

Het gekke is echter dat in admin/functions.php regel 6
PHP:
1
2
3
function loginform () 
{
    if( $_SERVER['REQUEST_METHOD'] == 'POST' )  // regel 6


En regel 49 is de afsluitende "}" van loginform.

Dus dan zou ik binnen de functie loginform nogmaals de functie loginform gemaakt moeten hebben. Maar dat heb ik niet gedaan. Ik heb gezocht naar loginform binnen de functie maar daar word niets gedeclareerd.

Waar kan ik nog meer op letten, want loginform is ook geen officicele functie van PHP.

  • Enfer
  • Registratie: Februari 2004
  • Laatst online: 10-10 13:28
Dan wordt er waarschijnlijk toch, zonder dat je het weet, functions.php geinclude. Je zou eens een booltje kunnen zetten bovenaan je functions, en boven de declaratie checken of de boolean geset is.
PHP:
1
isset($var)


Gebruik je overal require_once bij het includen van je files?

De foutmelding geeft aan dat hij op regel 6 de declaratie van je methode ziet, hij geeft aan dat hij dit op 49 opmerkt omdat de parser aan het einde van de functie pas ziet om wat voor'n functie het gaat (de functie is dan immers geheel gedeclareerd)

[ Voor 35% gewijzigd door Enfer op 02-02-2011 12:32 ]


  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 03-11 14:28
Ik wil je aanraden om ons in eerste instantie wat meer code te geven, hier kunnen wij ook niets mee. Het enige wat ik je kan aanraden is toch beter te debuggen. PHP gooit deze fout niet zomaar.

@Enfer: Je bedoelt function_exists?

  • Enfer
  • Registratie: Februari 2004
  • Laatst online: 10-10 13:28
Manuel schreef op woensdag 02 februari 2011 @ 12:31:
Ik wil je aanraden om ons in eerste instantie wat meer code te geven, hier kunnen wij ook niets mee. Het enige wat ik je kan aanraden is toch beter te debuggen. PHP gooit deze fout niet zomaar.

@Enfer: Je bedoelt function_exists?
Nee Manuel,

Als je in functions.php op regel 3 zet:
PHP:
1
$strangeVar = true;


Vervolgens doe je op regel 2 van functions.php, zodat je het volgende krijgt:
PHP:
1
2
3
4
if( isset( $strangeVar ) ){
 die( "Previous declaration of strangeVar!" );
}
$strangeVar = true;


Zo kan BlackWhizz nogmaals controleren of het bestand echt niet tweemaal ergens geinclude wordt.

Maar je kunt ook om elke functie inderdaad function_exists gaan gooien, of dat netjes is is echter een tweede.....

[ Voor 10% gewijzigd door Enfer op 02-02-2011 12:34 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 13:54

.oisyn

Moderator Devschuur®

Demotivational Speaker

Wordt die functie toevallig gedeclareerd binnen een andere functie, die meerdere keren wordt aangeroepen? Dit geeft namelijk dezelfde foutmelding:

PHP:
1
2
3
4
5
6
7
function Foo()
{
    function Bar() { }
}

Foo(); // alles ok
Foo(); // BOEM!


Hetzelfde geldt natuurlijk als Bar() in bar.php staat die je includet vanuit Foo().

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.


  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 03-11 14:28
Enfer schreef op woensdag 02 februari 2011 @ 12:33:
[...]

Nee Manuel,

Zo kan BlackWhizz nogmaals controleren of het bestand echt niet tweemaal ergens geinclude wordt.


Maar je kunt ook om elke functie inderdaad function_exists gaan gooien, of dat netjes is is echter een tweede.....
Ja op die fiets. Wat ik bedoel is bijna hetzelfde, alleen kan dit in 1 regel.
PHP:
1
var_dump(function_exists('loginform'));


Waarom zou dit voor het debuggen niet netjes zijn? Alleen als je een groot pakket maakt (<5.3) dan is er haast geen andere manier of de gebruiker moet zijn functienamen aanpassen.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 13:54

.oisyn

Moderator Devschuur®

Demotivational Speaker

Jullie praten langs elkaar heen. Jullie hebben het beide louter over troubleshooting, terwijl je denkt dat de ander het over symptoombestrijding heeft.

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.


  • BlackWhizz
  • Registratie: September 2004
  • Laatst online: 08-12-2024
Goed, ik ben er eindelijk achter.

Ik includede de bootstrap (die laadt de functies). Echter verwees de bootstrap naar functions.php en admin/functions.php. In de public html klopte dit wel maar bij de admin verwijst dat naar admin/functions.php en admin/functions.php. En daar ging het verkeerd.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ik ben geen PHP expert, maar moet een require_once of include_once ofzo dat niet voorkomen?

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


  • MueR
  • Registratie: Januari 2004
  • Laatst online: 15:23

MueR

Admin Devschuur® & Discord

is niet lief

Ja, daarom heten ze ook _once. Daarom wordt ook altijd aangeraden om die functies te gebruiken, tenzij het om een bestand gaat wat meerdere keren geinclude moet kunnen worden. Het aantal momenten waarop je dat nodig hebt is niet bijster groot.

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


  • BlackWhizz
  • Registratie: September 2004
  • Laatst online: 08-12-2024
MueR schreef op woensdag 02 februari 2011 @ 16:10:
Ja, daarom heten ze ook _once. Daarom wordt ook altijd aangeraden om die functies te gebruiken, tenzij het om een bestand gaat wat meerdere keren geinclude moet kunnen worden. Het aantal momenten waarop je dat nodig hebt is niet bijster groot.
Ok, ik had gehoord nml dat het heel veel tijd kost om include_once te doen.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 13:54

.oisyn

Moderator Devschuur®

Demotivational Speaker

Dat lijkt me onzin van de bovenste plank :)

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: 15:23

MueR

Admin Devschuur® & Discord

is niet lief

Tegen de tijd dat je zoveel bestanden gaat requiren dat het een probleem wordt, mag je vertellen waarom je al Google's functionaliteiten aan het nabouwen bent, ok? :+

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


  • PeterSelie
  • Registratie: December 2002
  • Laatst online: 29-10 16:10
MueR schreef op woensdag 02 februari 2011 @ 16:35:
Tegen de tijd dat je zoveel bestanden gaat requiren dat het een probleem wordt, mag je vertellen waarom je al Google's functionaliteiten aan het nabouwen bent, ok? :+
offtopic:
Wellicht is hij Bing aan het nabouwen, was het niet juist Microsoft die de functionaliteit van Google deed includen? :>

  • ReenL
  • Registratie: Augustus 2010
  • Laatst online: 14-09-2022
Als je volgende keer een file verdenkt op dubbel ge-include worden:

PHP:
1
2
3
4
5
<?php
if ( defined('INCLUDED_FILE_X') ) {
    throw new Exception("File already included."); // Zo krijg je een stack trace waar die de tweede keer geinclude wordt.
}
define('INCLUDED_FILE_X', true);
Pagina: 1