php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 02-07-2007, 15:27
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard [PHP5] merkwürdiges $GLOBALS-Verhalten

Hi Leute

folgendes Problem:
In meinem CMS verwende ich eine Kernklasse, die die Konfiguration etc. vornimmt. Beim Initialisieren der Klasse lege ich unter der Variablen $me im globalen Bereich das aktuelle Userprofil ab, so dass von überall Zugriff besteht.
Der Kern wird über eine Datei core.inc.php eingerichtet, welche in alle Dateien includiert wird.
Das Problem ist jetzt, das bei mir lokal alles bestens läuft und auf meinem Webspace lief bis vor einem Monat auch alles super. Ich weiß nicht genau, aber ich glaube, die Hoster sind von PHP 5.1.X auf 5.2.2 gegangen. Lokal läuft 5.1.1. Und nun macht folgende Zeile auf dem Webspace Probleme:
PHP-Code:
$GLOBALS['me'] = new Userprofil$_SESSION['user'] ); 
Macht Probleme heißt, es kommt keine Ausgabe an den Client. Also, selbst wenn ich vor dieser Zeile einige echos einfüge, sehe ich nur eine weiße Seite. Sobald ich die Zeile auskommentiere, funktioniert alles wieder (bis irgendwann auf die nichtdefinierte Variable $GLOBALS['me'] zugegriffen wird).
Ich habe schon versucht, woran das Problem liegen könnte, jedoch keine Lösung gefunden.
Ich kann der Variablen alles mögliche Zuweisen und ich kann auch das Userprofil anlegen und irgend einer anderen Variablen Zuweisen. Auch der Weg, die Variable per
PHP-Code:
global $me
bekannt zu machen und dann zuzuweisen, resultiert in einer weißen Seite. Auch wenn ich das neue Userprofil-Objekt vorerst einer anderen Variablen zuweise und dann der globalen, sehe ich nur Weiß.

Nach einem Blick in die phpinfo viel mir der Versionsunterschied auf. In den Changelog von php steht bei Version 5.2.0 der Eintrag:
Code:
Added automatic module globals management. (Dmitry)
Meiner Meinung nach wird da das Problem liegen.

Meine Frage nun, was kann ich da tun? Habt ihr ein paar Ideen, wie ich jetzt vorgehen sollte? Schließlich ist das System so nicht lauffähig!

Gruss
Martin
Mit Zitat antworten
  #2 (permalink)  
Alt 02-07-2007, 16:12
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Warum verwendest du auch $GLOBALS?
Singleton-Pattern und fertig.
Mit Zitat antworten
  #3 (permalink)  
Alt 02-07-2007, 16:14
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Ja, ich weiß, habe ich auch schon mehrmals drüber nachgedacht. Da aber mehrere Userprofile existieren können, halte ich dies für nicht ganz passend.
Außerdem löst dies nicht das Problem! Aber trotzdem schonmal danke!
Mit Zitat antworten
  #4 (permalink)  
Alt 02-07-2007, 16:44
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von PHP-Desaster
Ja, ich weiß, habe ich auch schon mehrmals drüber nachgedacht. Da aber mehrere Userprofile existieren können, halte ich dies für nicht ganz passend.
Dann fehlt dir scheinbar die Kreativität...
PHP-Code:
$user1 userprofil::get_profil_by_id(1);
$user2 userprofil::get_profil_by_id(2); 
Das ganze lässt sich per static property und method ganz leicht umsetzen.

Zitat:
Außerdem löst dies nicht das Problem! Aber trotzdem schonmal danke!
Wenn es wirklich ein Bug in PHP ist (worauf eine weiße Seite für gewöhnlich schließen lässt, sofern display_errors=on und error_reporting=E_ALL ist; denn dann findet sich meist ein segfault im apache-error-Log wieder), kannst du da sowieso nichts dran ändern.
Mit Zitat antworten
  #5 (permalink)  
Alt 02-07-2007, 16:54
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Ich denke, es scheint sich dabei wirklich um einen PHP-Bug zu handeln. Habe jetzt eine static-Variable draus gemacht, also wie ghostgambler bereits meinte, Singleton-Muster!

Falls doch noch wer eine Lösung mit der $GLOBALS-Variante parat hat, immer her damit
Mit Zitat antworten
  #6 (permalink)  
Alt 02-07-2007, 17:06
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Kannst du mal einen kurzen Beispiel-Code erstellen mit dem sich das Problem eingrenzen lässt?
Ich will das bei mir mal ausprobieren...
Mit Zitat antworten
  #7 (permalink)  
Alt 03-07-2007, 12:28
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Ich kann dir nicht genau sagen, wo das Problem liegt, aber ich kann es mal versuchen.

Core.class.php
PHP-Code:
<?php
class Core {
  static public function 
init() {
    
// ...
    
if( !isset( $_SESSION['user'] ) ) {
      
$_SESSION['user'] = array( 'id'=>0'name'=>'Gast' );
    }
    
$GLOBALS['me'] = new Userprofil$_SESSION['user'] );
    
// ...
  
}
}
?>
Userprofil.class.php
PHP-Code:
<?php
class Userprofil extends ArrayObject {
  public function 
__construct$args ) {
    
// ...
  
}
}
?>
core.inc.php
PHP-Code:
<?php
  
// ...
  
include "Userprofil.class.php";
  include 
"Core.class.php";
  
Core::init();
  
// ...
?>
index.php
PHP-Code:
<?php
  
include "core.inc.php";
  
// ...
  // Zugriff auf Userprofil
  
var_dump$GLOBALS['me'] );
?>

Habe alles wahrscheinlich unwichtige herausgenommen. Die Struktur des einbindens ist aber so, wie hier im Beispiel, bis auf den Unterschied, dass die Klasse Userprofil per __autoload geladen wird, da kann der Fehler aber nicht liegen, da auch andere Klassen korrekt geladen werden.
Guck mal, ob das bei dir Korrekt läuft!
Mit Zitat antworten
  #8 (permalink)  
Alt 03-07-2007, 12:47
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

PHP-Code:
<?php
class Userprofil extends ArrayObject {
  public function 
__construct$args ) {
    
// ...
  
}
}


class 
Core {
  static public function 
init() {
    
// ...
    
if( !isset( $_SESSION['user'] ) ) {
      
$_SESSION['user'] = array( 'id'=>0'name'=>'Gast' );
    }
    
$GLOBALS['me'] = new Userprofil$_SESSION['user'] );
    
// ...
  
}
}

  
Core::init();


var_dump$GLOBALS['me'] );
Code:
F:\Dokumente und Einstellungen\GhostGambler\Desktop\php-5.2.2-Win32>php-cgi.exe test.php
X-Powered-By: PHP/5.2.2
Content-type: text/html

object(Userprofil)#1 (0) {
}
funktioniert demnach bei mir ... bei dir nicht?
Ansonsten stell bitte mal ein vernünftigen Test-Case zusammen, d.h. Code der bei dir nicht geht, den ich kopieren und einfügen kann und bei mir ausprobieren kann.
Mit Zitat antworten
  #9 (permalink)  
Alt 06-07-2007, 14:41
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Das Problem muss doch wo anders liegen. Ich bin immer noch auf der Suche, will aber nicht die ganzen Skripte posten.
Also -> *Thread erstmal auf Eis leg*
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script ansehen ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script

Mit unserer Lösungen können Sie nahezu jeden B2B / B2C Marktplatz betreiben den Sie sich vorstellen können. Ganz egal ob Sie einen Automarktplatz, Immobilenportal oder einfach einen Anzeigenmarkt betreiben möchten. Mit ebiz-trader können Sie Ihre Anforder

11.10.2018 Berni | Kategorie: PHP/ Anzeigenmarkt
PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:34 Uhr.