php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 06.05.2009, 21:00  
Neuer Benutzer
 
Registriert seit: 15.08.2008
Beiträge: 9
Chestarbargel befindet sich auf einem aufstrebenden Ast
Standard require und redeclare | fatal error

Hallo.

Ich habe hier ein Problem bei require, und finde die Ursache nicht.

Zuerst einmal der passende Code:
3 Dateien:

functions.php enthält eine Funktion:
PHP-Code:
function checkRights() {
  
//Ein wenig Code

prepend.php:
PHP-Code:
//Ein wenig Code
require 'functions.php';
//Ein wenig Code 
index.php
PHP-Code:
require 'prepend.php';
require 
'functions.php'
Wenn ich nun die index.php aufrufe, erwarte ich, dass php mit einem
Fatal Error: cannor redclare ...
aussteigt, da versucht wird, die Funktion checkRights erneut zu deklarieren.

Tjo, das tut php in meiner Entwicklungsumgebung aber nicht.
Selbst bei vollem Error-Reporting wird einfach kein Fehler angezeigt.
Auf einem Server allerdings steigt php mit dem fatal error aus.

Ich stehe da grade echt auf dem Schlauch, hat jemand eine Idee?
In den php Bugs/Changelogs konnte ich auch nichts verwertbares finden.

Entwicklungsumgebung:
Windows Vista
XAMPP Paket mit php 5.2.9

Server:
Linux(genauer habe ich grade nicht zur Hand)
php 5.2.4

Grüße,
Chestarbargel
Chestarbargel ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 06.05.2009, 21:09  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Irgendwas wird aber doppelt aufgerufen. Kann es sein dass du in prepend.php die functions.php einbindest oder so etwas? Denn irgendwo wirds schon her kommen. Du zeigst uns zumindest zu wenig Code als wenn wir den Fehler finden könnten.
Flor1an ist gerade online  
Alt 06.05.2009, 21:09  
Erfahrener Benutzer
 
Benutzerbild von leonv
 
Registriert seit: 12.01.2009
Beiträge: 344
PHP-Kenntnisse:
Fortgeschritten
leonv befindet sich auf einem aufstrebenden Ast
Standard

Ich wüsste nicht, dass Entwicklungsumgebungen sowas erkennen.

Um die Fehlermeldung auch auf deinem Server zu umgehen sollte ein require_once bereits ausreichen.
__________________
Kreativität und Schöpfung durch Chaos und Ordnung.
leonv ist offline  
Alt 06.05.2009, 21:20  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

require_once sollte aber möglichst nur dann eingesetzt werden wenn es nicht vermeidbar ist Dateien mehrfach einzubinden.

In den meisten Fällen ist es aber vermeidbar, gerade auch bei Chestarbargel der ja nur Dateien statisch einbindet.
Flor1an ist gerade online  
Alt 06.05.2009, 21:24  
Neuer Benutzer
 
Registriert seit: 15.08.2008
Beiträge: 9
Chestarbargel befindet sich auf einem aufstrebenden Ast
Standard

Hiho.

Zitat:
Zitat von Flor1an Beitrag anzeigen
Kann es sein dass du in prepend.php die functions.php einbindest oder so etwas? [..] Du zeigst uns zumindest zu wenig Code als wenn wir den Fehler finden könnten.
Ich glaube eigentlich, dass der Code ausreicht, schau nochmal genau auf den prepend Code-Schnippsel
Klar, in der prepend wird die functions auch nochmal eingebunden.

Was mich dabei wundert ist, dass mein php auf Windows den Aufruf der index.php NICHT mit einem Fatal Error beendet, sondern sauber durchläuft.

Mir ist also klar, das man Dateien nicht doppelt einbinden darf, und wie man mit require_once umgeht.

Wieso sagt mir mein php auf Windows aber nicht, dass dort ein Fehler ist?

Grüße
Chestarbargel ist offline  
Alt 06.05.2009, 21:30  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Sorry ich hab nicht genau hingeschaut Du bindest die Datei ja wirklich zwei mal ein.

Wieso das auf Windows nicht abbricht, keine Ahnung. Vielleicht sind die Pfade falsch, vlt. unterdrückst du auch noch die Fehlermeldungen (also falls eine Datei nicht eingebunden werden kann und diese Fehlermeldung dann nicht angezeigt wird) oder deine lokale Version ist eben nicht die selbe wie online.

Auf jeden Fall ist es so nicht möglich die Dateien zwei mal einzubinden. Ist dir das jetzt nur aufgefallen und du fragst dich warum du auf dem Windows Rechner keine Fehlermeldung bekommst?
Flor1an ist gerade online  
Alt 06.05.2009, 21:37  
Neuer Benutzer
 
Registriert seit: 15.08.2008
Beiträge: 9
Chestarbargel befindet sich auf einem aufstrebenden Ast
Standard

Hoi.

Zitat:
Zitat von Flor1an Beitrag anzeigen
Vielleicht sind die Pfade falsch, vlt. unterdrückst du auch noch die Fehlermeldungen (also falls eine Datei nicht eingebunden werden kann und diese Fehlermeldung dann nicht angezeigt wird) oder deine lokale Version ist eben nicht die selbe wie online.
Ich kann auch 2mal in die gleiche Datei:
require 'functions.php';
schreiben, juckt auch nicht, die Datei wird eingebunden, die Funktion steht zur Verfügung. Alles funktioniert.
An Fehlern wird alles ausgegeben, was php ausgeben kann.
Versionsmäßig hab ich einmal 5.2.4 und 5.2.9, also verschieden sind sie, aber nicht allzuweit voneinander entfernt.

Zitat:
Zitat von Flor1an Beitrag anzeigen
Ist dir das jetzt nur aufgefallen und du fragst dich warum du auf dem Windows Rechner keine Fehlermeldung bekommst?
Ja, das ist mir aufgefallen als lokal alles lief.
Habs dann auf den Server geladen, und nur noch weisse Seiten gesehen.
Die Error-Logs haben mich dann schnell zu dem Fehler geführt, und ich habe mich gefragt, was zum Teufel ich da eigentlich gemacht habe, und wieso mir das beim testen nicht aufgefallen ist.

Ich finds merkwürdig.
Chestarbargel ist offline  
Alt 07.05.2009, 10:32  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Nutzt du auf dem nicht lokalen Rechner einen OpCode Cacher? Ich hatte letztens das Problem beim Zend Framework dass es lokal alles lief, aber online mit OpCode Cacher dann nicht mehr.
Flor1an ist gerade online  
Alt 07.05.2009, 11:35  
Neuer Benutzer
 
Registriert seit: 15.08.2008
Beiträge: 9
Chestarbargel befindet sich auf einem aufstrebenden Ast
Standard

Moin Moin.

Zitat:
Zitat von Flor1an Beitrag anzeigen
Nutzt du auf dem nicht lokalen Rechner einen OpCode Cacher? Ich hatte letztens das Problem beim Zend Framework dass es lokal alles lief, aber online mit OpCode Cacher dann nicht mehr.
Ja, ich nutze in beiden Umgebungen APC.
Der Tipp ging auf jedenfall in die richtige Richtung.
Wenn ich lokal APC deaktiviere, bekomme ich die gewünschte Fehlermeldung.

Ich suche dann mal nach dem Grund, bzw dieEinstellung, die dafür verantwortlich ist.

Grüße,
Chestarbargel
Chestarbargel ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Fatal error: Call to a member function assign() on a non-object in ... Cheesy PHP Tipps 2008 11 08.10.2008 14:16
[Erledigt] Smarty Fatal Error martl666 PHP Tipps 2008 4 30.09.2008 10:59
Fatal error: Class 'HTML' not found in C:\xampp\htdocs\SMC\common.php on line 18 Raito PHP Tipps 2008 4 05.03.2008 16:17
Fatal error: Call to a member function on a non-object atom-dragon PHP Tipps 2007 20 02.12.2007 22:22
Spionageversuch? Code-Injection? saibot PHP-Fortgeschrittene 24 06.10.2007 02:07
Fatal Error bei DB-Import über Consolenbefehl (Windows) PsychoEagle Datenbanken 2 01.10.2007 15:03
xmlrpc-epi kompilieren [gelöst] freq.9 Server, Hosting und Workstations 4 24.07.2005 21:45
Fatal Error bei Loginscript PHP Tipps 2005-2 11 22.06.2005 16:17
[Erledigt] Fatal Error PHP Tipps 2005 11 21.05.2005 11:39
Fatal error: Cannot redeclare datei_erstellen() (previously PHP Tipps 2005 14 07.03.2005 13:51
Fatal error: Allowed memory size of 8192 bytes exhausted at PHP Tipps 2005 11 06.03.2005 19:26
Fatal error: Call to undefined function: imagecreatefromjpeg DannyD PHP-Fortgeschrittene 10 05.12.2004 21:59
[Erledigt] Fatal error: Cannot redeclare CSQLAdmin PHP Tipps 2004-2 3 28.11.2004 14:42
Fatal error test022 PHP Tipps 2004 2 24.10.2004 15:25
Fatal error: Call to undefined function: mail() in... PHP Tipps 2004 5 31.07.2004 17:25

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php cannot redeclare umgehen, php redeclare umgehen, require php, cannot redeclare umgehen, php require datei mehrfach einbinden, zweimal require( php, selbe funktion wie require nur keine code ausgabe php, php fatal error umgehen, php require nochmal, php doppelt rewuire, in einer php datei 2 mal require, php require gleicher funktionsname, cannot redeclare php selbe datei, cannot redeclare php umgehen, redeclare php require, 2 mal require im html benötigt, php gleiche funktionsnamen redeclare, php require geht nicht aber kein error, redeclare php umgehen, require php keine fehlermeldung

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:43 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum