y'a-t'il un moyen de fermer toutes les connexion mysql, tous les
répertoires ouverts, les fichiers ouverts, etc. sans en stipuler le nom ?
Si mon script rencontre une erreur, il traite ça avec set_error_handler
et une fonction autre fonction si l'erreur necessite l'arrêt du script.
Mais il est trop confus de renseigner cette fonction sur ce qui est
ouvert. Je cherche donc à tout fermer sans préciser ce qui est ouvert.
Si le script s'arrête, pas de problème à mon avis. Mais s'il doit continuer, je ne sais pas comment faire pour tout fermer.
Bon, il n'y peut-être pas de moyen alors. Je suis déjà content d'apprendre que tout est fermé quand le script s'arrête. Merci.
Marc
Olivier Masson wrote:
Si le script s'arrête, pas de problème à mon avis. Mais s'il doit continuer, je ne sais pas comment faire pour tout fermer.
en progammation objet, cela s'appelle un destructeur. C'est generalement le role qu'on donne a un destructeur (d'objet) que de fermer les fichiers ouverts, les connexion TCP pas encore fermée.
Sinon, php en general s'en occupe tout seul, pas de soucis.
Un petit exemple objet :
function lire_fichier($name){
# j'ai ici une classe de lecture de fichier faite maison # c'est juste un exemple, peu importe comment c'est fait. $file = new FileReader($name);
# maintenant le fichier est ouvert.
# je veux voir le contenu du fichier (exemple) $file->dump();
# fin de procedure ; # l'objet est detruit # la methode de destruction est automatiquement appelée # $file->__destruct(); # les ressources sont libérée }
classe FileReader{
var $file; var $fd;
function __construct($file){ $this->file = $file; $this->fd = fopen($file, 'r'); }
function __destruct(){ fclose($this->fd); } }
Olivier Masson wrote:
Si le script s'arrête, pas de problème à mon avis. Mais s'il doit
continuer, je ne sais pas comment faire pour tout fermer.
en progammation objet, cela s'appelle un destructeur. C'est generalement
le role qu'on donne a un destructeur (d'objet) que de fermer les
fichiers ouverts, les connexion TCP pas encore fermée.
Sinon, php en general s'en occupe tout seul, pas de soucis.
Un petit exemple objet :
function lire_fichier($name){
# j'ai ici une classe de lecture de fichier faite maison
# c'est juste un exemple, peu importe comment c'est fait.
$file = new FileReader($name);
# maintenant le fichier est ouvert.
# je veux voir le contenu du fichier (exemple)
$file->dump();
# fin de procedure ;
# l'objet est detruit
# la methode de destruction est automatiquement appelée
# $file->__destruct();
# les ressources sont libérée
}
classe FileReader{
var $file;
var $fd;
function __construct($file){
$this->file = $file;
$this->fd = fopen($file, 'r');
}
Si le script s'arrête, pas de problème à mon avis. Mais s'il doit continuer, je ne sais pas comment faire pour tout fermer.
en progammation objet, cela s'appelle un destructeur. C'est generalement le role qu'on donne a un destructeur (d'objet) que de fermer les fichiers ouverts, les connexion TCP pas encore fermée.
Sinon, php en general s'en occupe tout seul, pas de soucis.
Un petit exemple objet :
function lire_fichier($name){
# j'ai ici une classe de lecture de fichier faite maison # c'est juste un exemple, peu importe comment c'est fait. $file = new FileReader($name);
# maintenant le fichier est ouvert.
# je veux voir le contenu du fichier (exemple) $file->dump();
# fin de procedure ; # l'objet est detruit # la methode de destruction est automatiquement appelée # $file->__destruct(); # les ressources sont libérée }
classe FileReader{
var $file; var $fd;
function __construct($file){ $this->file = $file; $this->fd = fopen($file, 'r'); }
function __destruct(){ fclose($this->fd); } }
Florian Sinatra
Notre cher _Marc_ a joyeusement tapoté le 03/02/2006 15:56 :
classe FileReader{
var $file; var $fd;
function __construct($file){ $this->file = $file; $this->fd = fopen($file, 'r'); }
function __destruct(){ fclose($this->fd); } }
Très joli, mais y a-t-il un moyen d'avoir un destructeur en PHP4 sans devoir faire $file->__destruct(); ?
Notre cher _Marc_ a joyeusement tapoté le 03/02/2006 15:56 :
classe FileReader{
var $file;
var $fd;
function __construct($file){
$this->file = $file;
$this->fd = fopen($file, 'r');
}
function __destruct(){
fclose($this->fd);
}
}
Très joli, mais y a-t-il un moyen d'avoir un destructeur en PHP4 sans
devoir faire $file->__destruct(); ?
function __construct($file){ $this->file = $file; $this->fd = fopen($file, 'r'); }
function __destruct(){ fclose($this->fd); } }
Attention :
$a = new FileReader(); $b = $a; $b->$file = ''; // modification d'une variable pour forcer le clonage
Ensuite $a est détruit puis $b, d'où la fermeture deux fois du fichier. Il faut donc éviter scrupuleusement de copier les FileReader
-- Vincent
Marc
Vincent Lascaux wrote:
$a = new FileReader(); $b = $a; $b->$file = ''; // modification d'une variable pour forcer le clonage
Ensuite $a est détruit puis $b, d'où la fermeture deux fois du fichier. Il faut donc éviter scrupuleusement de copier les FileReader
oui tu as raison. En fait l'exemple donné est la pour l'illustration, et se doit de rester simple, mais en meme temps, il est certain qu'on peut etre rapidement amené a avoir de tels soucis si on n'y prete pas garde.
PS: la grotte est enfin réouverte (http://poocl.la-grotte.org/) merci ;-)
Vincent Lascaux wrote:
$a = new FileReader();
$b = $a;
$b->$file = ''; // modification d'une variable pour forcer le clonage
Ensuite $a est détruit puis $b, d'où la fermeture deux fois du fichier.
Il faut donc éviter scrupuleusement de copier les FileReader
oui tu as raison. En fait l'exemple donné est la pour l'illustration,
et se doit de rester simple, mais en meme temps, il est certain qu'on
peut etre rapidement amené a avoir de tels soucis si on n'y prete pas garde.
PS: la grotte est enfin réouverte (http://poocl.la-grotte.org/) merci ;-)
$a = new FileReader(); $b = $a; $b->$file = ''; // modification d'une variable pour forcer le clonage
Ensuite $a est détruit puis $b, d'où la fermeture deux fois du fichier. Il faut donc éviter scrupuleusement de copier les FileReader
oui tu as raison. En fait l'exemple donné est la pour l'illustration, et se doit de rester simple, mais en meme temps, il est certain qu'on peut etre rapidement amené a avoir de tels soucis si on n'y prete pas garde.
PS: la grotte est enfin réouverte (http://poocl.la-grotte.org/) merci ;-)
loufoque
Très joli, mais y a-t-il un moyen d'avoir un destructeur en PHP4 sans devoir faire $file->__destruct(); ?
il faut déclarer une fonction a appelé via le constructeur :
class MyClass { function MyClass() { register_shutdown_function(array($this,"_MyClass"));
Ce qui n'est pas du tout la même chose qu'un destructeur.
Et c'est pas vraiment un concept de programmation objet, plutôt un concept de RIAA.
Très joli, mais y a-t-il un moyen d'avoir un destructeur en PHP4 sans
devoir faire $file->__destruct(); ?
il faut déclarer une fonction a appelé via le constructeur :
class MyClass {
function MyClass() {
register_shutdown_function(array($this,"_MyClass"));
Ce qui n'est pas du tout la même chose qu'un destructeur.
Et c'est pas vraiment un concept de programmation objet, plutôt un
concept de RIAA.