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 25-08-2007, 23:26
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard problem mit eigener classe.

in eigener classe mache ich im destructor serialisieren von einer lokaler Variable und speichere das in eine datei und kontrolliere sogar ob die datei wirklich gespeichert ist.
im konstruktor kontrolliere ich ob diese datei mit serialisierem Inhalt da ist, und im fall, dass die datei existiert unserialisiere der inhalt und speichere es in lokale Variable.
Mein Problem liegt aber daran, dass der konstruktor die Datei nie findet,(auch bei 2-tem reload von dem script) obwohl im destruktor sie generiert und für testzwecke mit file_get_contents ausgelesen wurde.
Die Datei muss doch bei dem zweitem aufruf von dem Object, wenn ich reload mache schon da sein
was dabei komisch ist, dass ich die datei mit explorer auch nicht finden kann
vielleich habe ich einfach problem an betrieb System?
Aber ich will besser hoffen, dass ich ein logisches problem habe.
System Windows XP, xamp mit php 5.1.4

der script:
PHP-Code:
error_reporting(E_ALL);
class 
Configuration{
 private 
$file='./serialconfig.php';
 private 
$werte;
 public function 
__construct()
 {
   
$this->werte=array();
   if(
file_exists($this->file)) //<-muss doch bei 2-tem aufruf da sein, schau destruktor.
   
{
    
$s=file_get_contents($this->file);
    
$this->werte=unserialize(base64_decode($s));
   }else echo 
__LINE__.")file $this->file nicht gefunden<br />";//<-das bekomme ich ständig
 
}
 public function 
getAll(){return $this->werte;}
 public function 
__isset($var){return isset($this->werte[$var]);}
 public function 
__set($was,$wert){ $this->werte[$was]=$wert;}
 public function 
__get($was){return $this->werte[$was];}
 public function 
__unset($var)
 {
   if(isset(
$this->werte[$var]))unset($this->werte[$var]);
 }
 public function 
__destruct()
 { 
   echo 
"<br /> start von destruct <br />"
   
$s=base64_encode(serialize($this->werte));
   
//echo $s;
   
file_put_contents($this->file,$s);
   if(
file_exists($this->file))//hier habe ich extra zur kontrolle geprüft ob die datei geschrieben wurde
   
echo "<br />".__LINE__.")file $this->file existiert, Inhalt:".file_get_contents($this->file);
   echo 
"<br />".__LINE__.")ende von destruct";   
 }
}

//Test 
$con =new Configuration();//hier bekomme ich ständig meldung, dass die datei nicht existiert
$con->wartung='hallo';
echo 
$con->wartung;
//und hier kommt der destructor mit der bestätigung, dass die datei existiert. 
die ausgabe auch bei mehrfachem reload (sogar mit verschiedenen get-parameter)
--------------------------------
58)file ./serialconfig.php nicht gefunden
hallo
start von destruct

75)file ./serialconfig.php existiert, Inhalt:YToxOntzOjc6IndhcnR1bmciO3M6NToiaGFsbG8iO30=
76)ende von destruct
----------------------
ich kann komische weise kein Grund finden, warum die datei im constructor nie gefunden wird und warum sie nicht auf der festplate zu finden ist, obwohl ich sie im destructor extra mit file_get_contents auslese.
__________________
Slava
bituniverse.com
Mit Zitat antworten
  #2 (permalink)  
Alt 25-08-2007, 23:39
highrise
 Member
Links : Onlinestatus : highrise ist offline
Registriert seit: Apr 2006
Ort: zu Hause *g*
Beiträge: 257
highrise ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ich kann ehrlich gesagt auch keinen Fehler finden...

was passiert denn, wenn du im selben script (ohne reload) zwei instanzen hintereinander erzeugst und zerstörst?

ungefähr so:

PHP-Code:
//Test 
$con =new Configuration();//hier bekomme ich ständig meldung, dass die datei nicht existiert
$con->wartung='hallo';
echo 
$con->wartung;

unset(
$con); //altes con sollte hier zerstört werden

$con2=new Configuration(); //wird hier die datei gefunden?? 

bin jetzt etwas ratlos...

greetzm high
__________________
Good programming is 40% experience, 20% skill, 20% RTFM, 15% caffeine, and 5% attention to detail.
When everything else fails, manipulate the data...
Beschriftungen / Großformatdruck / Werbemittel
Mit Zitat antworten
  #3 (permalink)  
Alt 25-08-2007, 23:40
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Wenn das alles in einem Scriptdurchlauf passiert, hilft dir:
http://de.php.net/manual/de/function.clearstatcache.php

*edit*
Dein Pfad wird nicht stimmen, so gehts:
PHP-Code:
class Configuration{
 private 
$file='';
 private 
$werte;
 public function 
__construct()
 {
   
$this->file dirname(__FILE__).'/serialconfig.php';
   echo  
'<br>xc'.$this->file.'xc<br>'// testcode
   
$this->werte=array();
   if(
file_exists($this->file)) //<-muss doch bei 2-tem aufruf da sein, schau destruktor.
   
{
    
$s=file_get_contents($this->file);
    
$this->werte=unserialize(base64_decode($s));
   }else echo 
__LINE__.")file $this->file nicht gefunden<br />";//<-das bekomme ich ständig
 
}

// gekürzt

Aber, warum das bei dir nicht funktioiert, ist mir auch noch nicht klar..
__________________
Wir werden alle sterben

Geändert von combie (26-08-2007 um 00:04 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 26-08-2007, 00:04
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard Re: problem mit eigener classe.

Zitat:
Original geschrieben von Slava vielleich habe ich einfach problem an betrieb System?
Aber ich will besser hoffen, dass ich ein logisches problem habe.
nur so als feedback, dein script funktioniert bei mir, die datei wird also angelegt.
hoffe, dass es dir erstmal weiterhilft - also am script liegt es nicht.
habe momentan aber auch keine idee, an welcher systemeinstellung es liegen könnte
Mit Zitat antworten
  #5 (permalink)  
Alt 26-08-2007, 00:07
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

Hi @highrise
Tatsächlich hat es bei 2-ter instanze hingehaut und der konstruktor hat keine meldung, dass die Datei nicht existiert.
nach dem ich kontrolliert habe, ob die datei im ordner ist (klingt jetzt wie eine fobie), habe ich sie auch entdeckt.

@combie
nach dem du mir clearstatcache() empfohlen hast, habe ich sofort verstanden, das das der richtiger weg ist, und habe diese funktion direkt im destrucktor und im construktor eingebaut.
Jetzt wundere ich mich aber , dass es nicht funktioniert hat.

ich habe sogar nach dem 10-em reload eine geraucht und auf dem Balkon geschimpft, jetzt sehe ich das Datei immer noch nicht da ist.

@3DMax
Danke.
ich werde jetzt einfach system noch mal hohfahren, vielleicht geht es wieder.

ich gehe noch eine rauchen
__________________
Slava
bituniverse.com

Geändert von Slava (26-08-2007 um 00:11 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 26-08-2007, 00:07
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

getcwd() liefert die Antwort!
Der Destruktor läuft schon im Apache Umfeld.
Zumindest bei mir, mod_php

*edit*
clearstatcache war ein (zu)Schnellschuß von mir...
__________________
Wir werden alle sterben

Geändert von combie (26-08-2007 um 00:21 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 26-08-2007, 00:26
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von combie
Der Destruktor läuft schon im Apache Umfeld.
Zumindest bei mir, mod_php
läuft denn bei dir das script?
php läuft bei mir als cgi.

@slava - rauch' nicht soviel
Mit Zitat antworten
  #8 (permalink)  
Alt 26-08-2007, 00:29
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

Tatsächlich ist aktuele pfad bei destructor im apache!!!!
wenn ich der absoluter pfad zur datei schreibe, dann funktioniert es sofort bei dem 2-tem reload.
Was für mich aber rätsel ist, Warum klappt es mit relativem Pfad, wenn ich einfach die 2-te Instanze erzeige?
Das ist nicht normal!
__________________
Slava
bituniverse.com
Mit Zitat antworten
  #9 (permalink)  
Alt 26-08-2007, 00:30
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

In Slavas Version nicht!
Nach dem Umbau im Konstruktor:
$this->file = dirname(__FILE__).'/serialconfig.php';
Auch bei mir...

getcwd() sagt bei mir:
Im Konstruktor H:\Programme\xampp\htdocs\fragmente
Im Destruktor H:\Programme\xampp\apache
__________________
Wir werden alle sterben
Mit Zitat antworten
  #10 (permalink)  
Alt 26-08-2007, 00:40
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von combie
[B]In Slavas Version nicht!
das ist ja interessant.
und wenn du jetzt im php-script explizit (bzw. implizit) den destructor aufrufst?
$con=null sollte eigentlich ausreichen.
Mit Zitat antworten
  #11 (permalink)  
Alt 26-08-2007, 00:42
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

Zitat:
Tatsächlich ist aktuele pfad bei destructor im apache!!!!
wenn ich der absoluter pfad zur datei schreibe, dann funktioniert es sofort bei dem 2-tem reload.
Was für mich aber rätsel ist, Warum klappt es mit relativem Pfad, wenn ich einfach die 2-te Instanze erzeige?
Das ist nicht normal!
Das funktioniert, da das aktuelle Verzeichnis (getcwd) beim Zerstören des ersten Objektes noch im Verzeichnis des Skriptes ist, die Abarbeitung wurde schließlich noch nicht beendet! Hast du nur ein Objekt und du zerstörst dieses nicht explizit, wird es erst beim Aufräumen von PHP zerstört, das aktuelle Verzeichnis ist also im Apache-Verzeichnis.
Mit Zitat antworten
  #12 (permalink)  
Alt 26-08-2007, 00:44
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

Ok! ich kann es nachvollziehen, dass destruktor irgendwo in apache landet.
Jetzt verstehe ich andere sache nicht.
wenn ich nach dem
$con =new Configuration();
echo $con->wartung;

einfach
echo dirname(__FILE__);
mache, dann zeigt er mir wieder der pfad von /apache!
soll das heisen, dass nach dem der destructor gelaufen ist, wird der aktueler ordner grundsätzlich weiter in /apache laufen?

In jedem fall habe ich in docu nichts darüber gelesen.
Und man muss schon zugeben, dass so ein Verhalten nicht unbedingt freundlich ist.
__________________
Slava
bituniverse.com

Geändert von Slava (26-08-2007 um 00:51 Uhr)
Mit Zitat antworten
  #13 (permalink)  
Alt 26-08-2007, 00:46
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
Original geschrieben von 3DMax
das ist ja interessant.
und wenn du jetzt im php-script explizit (bzw. implizit) den destructor aufrufst?
$con=null sollte eigentlich ausreichen.
Dann ist es wie erwartet:
H:\Programme\xampp\htdocs\fragmente
__________________
Wir werden alle sterben
Mit Zitat antworten
  #14 (permalink)  
Alt 26-08-2007, 00:50
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von combie
Dann ist es wie erwartet:
H:\Programme\xampp\htdocs\fragmente
danke, man lernt halt nie aus.
Mit Zitat antworten
  #15 (permalink)  
Alt 26-08-2007, 01:01
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
Und man muss schon zugeben, dass so ein Verhalten nicht unbedingt freundlich ist.
Evtl, ist das ein Fall für einen Bugreport..
__________________
Wir werden alle sterben
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

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 04:00 Uhr.