php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 23.11.2009, 07:21  
Neuer Benutzer
 
Benutzerbild von Haze
 
Registriert seit: 23.10.2009
Beiträge: 18
PHP-Kenntnisse:
Anfänger
Haze befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Wie wichtig ist fclose()?

Hi,

ich schreibe gerade einer Klasse, die das arbeiten mit Dateien einfach machen soll. Ziel ist eine Klasse, die mir erlaubt in Dateien zu schreiben, sie zu lesen, etc, ohne dass ich mich jedes mal um z.B. Berechtigungen kümmen muss.

Hat es irgendwelche Auswirkungen, wenn ich den filehandle überschreibe, ohne dass der geschlossen wurde? Oder ist das schließen essenziell wichtig?

Wenn das schließen wichtig ist, würde ich gern im Destructor den stream automatisch schließen lassen, wenn er noch nicht geschlossen ist.

Wie kann ich raus finden, ob der stream noch existiert?

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

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

Alt 23.11.2009, 08:02  
Erfahrener Benutzer
 
Registriert seit: 04.12.2008
Beiträge: 132
agundur befindet sich auf einem aufstrebenden Ast
agundur eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von Haze Beitrag anzeigen
Hi,
Wie kann ich raus finden, ob der stream noch existiert?
PHP: is_resource - Manual

Grüße Agundur
__________________
AFFE ist nur im Dezimalsystem ein Palindrom.
agundur ist offline  
Alt 23.11.2009, 08:51  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.240
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Is_resource prüft nicht, ob der Stream noch offen ist! Es gibt keine pauschale Antwort, wie man das prüft. Dateizeiger, Datenbankressourcen, sie alle verhalten sich da unterschiedlich.
__________________
www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih
mepeisen ist offline  
Alt 23.11.2009, 09:42  
Neuer Benutzer
 
Benutzerbild von Haze
 
Registriert seit: 23.10.2009
Beiträge: 18
PHP-Kenntnisse:
Anfänger
Haze befindet sich auf einem aufstrebenden Ast
Standard

Hi,

danke schonmal für die schnellen Antworten.

Wenn der stream geschlossen wurde, sollte die Variable aber nichtmehr vom Typ Resource sein. Sollte das so sein (ich kanns gerade nicht testen), bin ich schon zufrieden.

Allerdings bringt mich das bei der fclose() Frage nicht weiter. Kann ich die Handles einfach überschreiben, oder hat das irgendwelche Nachteile?

Grüße,
Haze
Haze ist offline  
Alt 23.11.2009, 10:16  
Erfahrener Benutzer
 
Benutzerbild von Dark Guardian
 
Registriert seit: 10.10.2009
Beiträge: 2.637
PHP-Kenntnisse:
Fortgeschritten
Dark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekannt
Standard

Zitat:
Zitat von Haze Beitrag anzeigen
Hi,

danke schonmal für die schnellen Antworten.

Wenn der stream geschlossen wurde, sollte die Variable aber nichtmehr vom Typ Resource sein. Sollte das so sein (ich kanns gerade nicht testen), bin ich schon zufrieden.

Allerdings bringt mich das bei der fclose() Frage nicht weiter. Kann ich die Handles einfach überschreiben, oder hat das irgendwelche Nachteile?

Grüße,
Haze
Das hat AFAIK Nachteile.

Simples Beispiel:

PHP-Code:
$a fopen();
$b fopen();
$a $b
Wie willst du jemals wieder das Handle vom ersten fopen() schließen um den Speicher freizugeben wenn du an das Handle nicht mehr ran kommst? -> Gar nicht.

Das kostet Arbeitsspeicher. Allerdings "lebt" eine PHP Instanz meist eh nur einen HTTP-Request lang und früher doer später kommt der Garbage Collector und räumt den Müll dann auf, daher ist das ggf. nicht so kritisch wie in C++/Delphi wo das dann nicht passiert.
Dark Guardian ist offline  
Alt 23.11.2009, 11:00  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Zitat:
Zitat von Dark Guardian Beitrag anzeigen
Das kostet Arbeitsspeicher. Allerdings "lebt" eine PHP Instanz meist eh nur einen HTTP-Request lang und früher doer später kommt der Garbage Collector und räumt den Müll dann auf, daher ist das ggf. nicht so kritisch wie in C++/Delphi wo das dann nicht passiert.
Sicher?

Wird PHP als z.B. Apache Modul eingebunden, "lebt" PHP solange, wie der Webserver läuft... Ich weiß nicht, ob PHP im Hintergrund aufräumt nach einem Request (vermute mal schon), aber trotzdem sollte man grade im Bereich von Webserver-Programmierung (lang laufende Prozesse) ganz besonders auf sauberen Umgang mit Resourcen achten.

Fakt ist: Ein offen gelassenes Handle ist nachlässige Programmierung, sollte man sich nicht angewöhnen, bloß weil das System von alleine aufräumt. Wie bereits erwähnt, wird man in anderen Programmiersprachen damit böse auflaufen.
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline  
Alt 23.11.2009, 11:31  
Benutzer
 
Registriert seit: 16.09.2009
Beiträge: 55
PHP-Kenntnisse:
Fortgeschritten
Sascha Ahlers befindet sich auf einem aufstrebenden Ast
Standard

Sieht man sich mal die Kommentare bei php.net an, findet man folgendes:

Zitat:
Zitat von daniel7 dot martinez at ps dot ge dot com
Generally, it's always a good idea to close a file when you're done with it. It's very easy for something to go wrong and corrupt a file that hasn't been closed properly. If you're concerned about efficiency, the overhead is negligible.

Quelle: PHP: fclose - Manual

Letztendlich ist egal, wie sich PHP verhält, wer sauber programmiert, schließt geöffnete Sachen auch wieder. Egal ob Datenbankverbindung oder File Handle.
Sascha Ahlers ist offline  
Alt 23.11.2009, 11:32  
Erfahrener Benutzer
 
Benutzerbild von Dark Guardian
 
Registriert seit: 10.10.2009
Beiträge: 2.637
PHP-Kenntnisse:
Fortgeschritten
Dark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekannt
Standard

Zitat:
Zitat von lstegelitz Beitrag anzeigen
Wird PHP als z.B. Apache Modul eingebunden, "lebt" PHP solange, wie der Webserver läuft...
Stimmt, daran habe ich nicht gedacht.

Dann ist das nicht schließen des Handles sogar "noch" dramatischer... je nachdem wann der GC anfängt zu arbeiten...
Dark Guardian ist offline  
Alt 23.11.2009, 12:33  
Neuer Benutzer
 
Benutzerbild von Haze
 
Registriert seit: 23.10.2009
Beiträge: 18
PHP-Kenntnisse:
Anfänger
Haze befindet sich auf einem aufstrebenden Ast
Standard

Hi,

wiedermal Danke für die vielen Antworten!

Damit wäre diese Frage von meiner seite auch 100% geklärt.

Grüße,
Haze
Haze 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
Fehler mit fwrite() und fclose() BoB133 PHP Tipps 2009 17 31.10.2009 23:03
fopen, fputs, fclose Kallewaze PHP Tipps 2009 14 23.10.2009 20:47
Formular, wie wichtig ist die Überprüfung? danysahne333 PHP Tipps 2006 14 15.05.2006 21:19
Probleme mit fopen, fread und fclose PHP-Fortgeschrittene 4 19.12.2005 14:37
Suche ein Produkt Katalog Script? !!Wichtig und schnell!! Beitragsarchiv 7 07.10.2005 23:47
[Erledigt] MySQL - Tabelle - Typ wichtig? (VARCHAR, TEXT) Datenbanken 9 15.07.2005 00:09
Suche Hinweis! Jeder Tip ist wichtig kanti Beitragsarchiv 8 02.05.2005 22:25
!!!WICHTIG!!! verschiedenes Off-Topic Diskussionen 8 30.12.2004 00:16
fputs, fclose, fopen PHP Tipps 2004-2 3 21.12.2004 17:01
[Erledigt] GAAAAAAAAAAANZ wichtig PHP Tipps 2004-2 22 03.12.2004 13:20
Informationen -> wichtig :) Skazi PHP Tipps 2004 2 19.10.2004 17:10
SQL Abfrage WICHTIG !!! Datenbanken 9 14.07.2004 16:28
Zufallszahlen falsch Wichtig PHP Tipps 2004 2 09.07.2004 12:59

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
fclose php, php fclose, php was passiert wenn kein fclose, php warum fclose(), was bringt fclose, schreiben ohne fclose, tipps für fclose, was bedeutet fclose(): 17, was wenn kein fclose, php is_resource, php fopen stream noch offen

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:45 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