Fatale error
Het probleem is dat ik ineens een error krijg die ervoor zorgt dat niks meer werkt, en overigens gaat deze error over een functie die ik nooit bewerkt heb en overigens niet veel schade aan zou kunnen richten.
Error:
Quote:
Fatal error: Cannot redeclare warningdiv() (previously declared in D:\wamp\www\sentiremaybe\ssi.php:74) in D:\wamp\www\sentiremaybe\ssi.php on line 74
Lijn 74(ook wel de functie):
Code (php)
1
function warningdiv($text) {global $sentire;echo "<div id='errordiv' style='font-weight:bold;color:#E2B602;'><table><tr><td><img src='".$sentire->url."/sources/admin/images/icons/warning.png' width='20' height='20'><td>".$text."</td></tr></table></div></div>";}
De gehele file(Mocht deze nodig zijn):
Code (php)
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?php
/**
* Funge Content Management System (FungeCMS)
*
* @version 1.0 BETA 1
*
* @package SENTIRE
* @author Funge http://www.funge.nl
* @copyright 2012 Funge
* @license BSD
*/
/* don't do anything if SSI is already loaded */
if (defined('CMS'))
return exit;
define('CMS', 'SSI');
/* disable absolute path of ssi.php */
if(basename($_SERVER['PHP_SELF']) == 'ssi.php')
return exit;
/* start session */
if(!headers_sent())
session_start();
/* include database objects */
require_once("Settings.php");
/* Create empty object for interface */
class sentire {}
/* Some global objects */
global $sentire, $theme, $sentire_language, $connect, $sentire_date_past, $sentire_user;
/* Create objects for global */
$sentire = new sentire();
$theme = new sentire();
$sentire_language = new sentire();
/* Create basical globals
*
* @root path for scripts
* @dir path for scripts
* @url path for html
* @reference database namespace
* @logged default as offline
* @page_not_found default error for actions
* @current_date it is now
* @date_past user is ofline
*
* !! Leave changes for experts !!
*/
$sentire->root = dirname(__file__);
$sentire->dir = dirname(__file__);
$sentire->url = $connect->url;
$sentire->reference = $connect->reference;
$sentire->logged = 1;
$sentire->page_not_found = 'This page cannot be found!';
$sentire->current_date = date("d-m-Y h:i:s", time());
$sentire_date_past = date("d-m-Y h:i:s", strtotime('- 15 minutes'));
/* Collecting basics out of database */
$basics = database_object("SELECT * FROM ".$connect->reference."basic_settings");
while($row = $basics->fetchObject()){$sentire_basics[$row->name] = $row->variable;}
/* Loading important files */
require_once($sentire->dir . '/sources/language/'.$sentire_basics['language'].'/index.php');
require_once($sentire->dir . '/Load.php');
require_once($sentire->dir . '/Security.php');
require_once($sentire->dir . '/theme/'.$sentire_basics['thememap'].'/index.template.php');
/* Message windows */
function warningdiv($text) {global $sentire;echo "<div id='errordiv' style='font-weight:bold;color:#E2B602;'><table><tr><td><img src='".$sentire->url."/sources/admin/images/icons/warning.png' width='20' height='20'><td>".$text."</td></tr></table></div></div>";}
function errordiv($text) {global $sentire;echo "<div id='errordiv' style='font-weight:bold;color:#C60000;'><table><tr><td><img src='".$sentire->url."/sources/admin/images/icons/warning.png' width='20' height='20'><td>".$text."</td></tr></table></div></div>";}
function messagediv($text) {global $sentire;echo "<div id='errordiv' style='font-weight:bold;color:green;'><table><tr><td><img src='".$sentire->url."/sources/admin/images/icons/messageing.png' width='20' height='20'><td>".$text."</td></tr></table></div></div>";}
?>
/**
* Funge Content Management System (FungeCMS)
*
* @version 1.0 BETA 1
*
* @package SENTIRE
* @author Funge http://www.funge.nl
* @copyright 2012 Funge
* @license BSD
*/
/* don't do anything if SSI is already loaded */
if (defined('CMS'))
return exit;
define('CMS', 'SSI');
/* disable absolute path of ssi.php */
if(basename($_SERVER['PHP_SELF']) == 'ssi.php')
return exit;
/* start session */
if(!headers_sent())
session_start();
/* include database objects */
require_once("Settings.php");
/* Create empty object for interface */
class sentire {}
/* Some global objects */
global $sentire, $theme, $sentire_language, $connect, $sentire_date_past, $sentire_user;
/* Create objects for global */
$sentire = new sentire();
$theme = new sentire();
$sentire_language = new sentire();
/* Create basical globals
*
* @root path for scripts
* @dir path for scripts
* @url path for html
* @reference database namespace
* @logged default as offline
* @page_not_found default error for actions
* @current_date it is now
* @date_past user is ofline
*
* !! Leave changes for experts !!
*/
$sentire->root = dirname(__file__);
$sentire->dir = dirname(__file__);
$sentire->url = $connect->url;
$sentire->reference = $connect->reference;
$sentire->logged = 1;
$sentire->page_not_found = 'This page cannot be found!';
$sentire->current_date = date("d-m-Y h:i:s", time());
$sentire_date_past = date("d-m-Y h:i:s", strtotime('- 15 minutes'));
/* Collecting basics out of database */
$basics = database_object("SELECT * FROM ".$connect->reference."basic_settings");
while($row = $basics->fetchObject()){$sentire_basics[$row->name] = $row->variable;}
/* Loading important files */
require_once($sentire->dir . '/sources/language/'.$sentire_basics['language'].'/index.php');
require_once($sentire->dir . '/Load.php');
require_once($sentire->dir . '/Security.php');
require_once($sentire->dir . '/theme/'.$sentire_basics['thememap'].'/index.template.php');
/* Message windows */
function warningdiv($text) {global $sentire;echo "<div id='errordiv' style='font-weight:bold;color:#E2B602;'><table><tr><td><img src='".$sentire->url."/sources/admin/images/icons/warning.png' width='20' height='20'><td>".$text."</td></tr></table></div></div>";}
function errordiv($text) {global $sentire;echo "<div id='errordiv' style='font-weight:bold;color:#C60000;'><table><tr><td><img src='".$sentire->url."/sources/admin/images/icons/warning.png' width='20' height='20'><td>".$text."</td></tr></table></div></div>";}
function messagediv($text) {global $sentire;echo "<div id='errordiv' style='font-weight:bold;color:green;'><table><tr><td><img src='".$sentire->url."/sources/admin/images/icons/messageing.png' width='20' height='20'><td>".$text."</td></tr></table></div></div>";}
?>
Kan iemand mij helpen? Ik weet echt niet wat ik met deze error moet doen. Het is al een tijdje geleden dat ik wat aan de admin panel heb gedaan en nu ineens na een paar weken werkt hij gewoonweg niet meer ...
Gewijzigd op 07/06/2012 13:33:57 door Phpnuke r
Be beste manier is om je script vanaf begin af aan even door te lopen en te controleren of er geen include() of require() in zit welke de functie dubbel laat aanmaken.
Anders kan je ook met include_once() werken, maar ik zie dta eerder als een simpel lapmiddel.
Gewijzigd op 07/06/2012 12:59:36 door - Ariën -
ssi.php beveiligd overigens zichzelf om twee keer geladen te worden, altans dat was de bedoeling met:
Code (php)
1
2
3
4
5
2
3
4
5
/* don't do anything if SSI is already loaded */
if (defined('CMS'))
return exit;
define('CMS', 'SSI');
if (defined('CMS'))
return exit;
define('CMS', 'SSI');
En het lijkt me dat dit systeem gewoon werkt. Overigens mocht die twee keer worden geladen en dat bovenstaande niet werkt zou hij al veel eerder error's moeten geven want mijn systeem bevat ontelbaar aantal functies voor de database en alles.
include 'Settings.php'; veranderd naar require_once (zie nieuwe code in mijn vorige post)
Enig raad? Ik weet echt niet wat ik moet doen het is me een raadsel...
Maar dit is om meerdere redenen helemaal fout natuurlijk:
1)
2) je zit niet in een functie, dus je kan helemaal niets returnen.
3) je kan geen exit returnen. Exit is een functie die de executie van je script stopt, niets anders.
Ok, zelf maar even getest omdat ik aan mijn eigen woorden twijfelde. 1 kan wel, omdat het 1 regel is. Punt 2 blijft staan, je zit niet in een functie, dus waarom een return. Punt 3 heeft geen nut (de return), maar de exit werkt op zich wel.
Echter, ik denk dat php al de error geeft bij het inladen van je bestand, nog voor script executie start. Dus nog voordat het if statement getest wordt, zal php al zien dat je tweemaal dezelfde functie hebt.
Gewijzigd op 07/06/2012 13:55:42 door Erwin H
Is niet waar accolades zijn niet nodig als je maar 1 regel naar de if typt het is natuurlijk wel netter.
Valid:
if($a==$b)
echo "Klopt!";
Invalid:
if($a==$b)
$c=true;
echo "Klopt!";
In voorbeeld twee zou je dus inderdaad accolades moeten gebruiken...
En inderdaad zoals je zegt is exit bedoeld om weg te gaan van de script omdat ssi.php maar een keer mag worden gebruikt.
Functies van mij zijn onmogelijk bereikbaar als ssi.php niet word geincluded. Als een fucntie twee keer word geladen is ssi ook twee keer geladen omdat zonder ssi.php niks kan werken omdat daar al het werk eigenlijk bij elkaar word gezet. Tenzij het stukje defined niet werkt (zonder return heeft trouwens geen effect)
Gewijzigd op 07/06/2012 14:02:54 door phpnuke r
Phpnuke r op 07/06/2012 13:58:39:
Erwin, een if statement hoeft geen accolades te hebben, tenzij je meerdere dingen in een if-statement wilt verwerken.
Klopt, ik had het zelf al aangepast.
Een week of 2 geleden had ik connect.php veranderd in Settings.php. Dit gaf in eerste stantie geen problemen maar nu dus blijkbaar wel. Gek genoeg, werkte alles wat connect.php(net dus Settings.php) gebruikt gewoon. Hoe dit kan snap ik dus niet. Waarom die aangeeft dat warningdiv neit werkt snap ik ook al niet, connect.php geeft namelijk geen warningdiv.
Ik had de functies verwijdert en daarnaast in chrome een aantal elementen verwijdert(f12 en dan lijnen backspacen) en ik kreeg opeens allemaal errors van connect.php(die overigens wel werken maar toch een error gaven).
Naja problem solved bedankt voor alle moeite :)