Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

fermer tout ce qui a ete ouvert

9 réponses
Avatar
Olivier Masson
Bonjour,

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.

Merci.

9 réponses

Avatar
Olivier Miakinen

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 ?


Tu as vraiment besoin de tout fermer avant l'arrêt du script (qui, si je
ne m'abuse, libère toutes les ressources) ?

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.


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.

--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)

Avatar
Olivier Masson

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.

Avatar
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);
}
}


Avatar
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(); ?

Avatar
Mike Massonnet
Florian Sinatra wrote:

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(); ?


il faut déclarer une fonction a appelé via le constructeur :

class MyClass {
function MyClass() {
register_shutdown_function(array($this,"_MyClass"));
}
function _MyClass() {
(...)
}
}

--
En fait, le systeme BSD se décompose, on va dire en 3
-Le noyau dans: /vmlinuz
-+- NLS in GFA: mélange des genres -+-


Avatar
Vincent Lascaux
classe FileReader{

var $file;
var $fd;

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

Avatar
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 ;-)

Avatar
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.


Avatar
Mike Massonnet
loufoque wrote:

Ce qui n'est pas du tout la même chose qu'un destructeur.



je n'ai pas dis que les destructeurs était un concept qui existait en
php4 :)

au moins ça se rapproche du comportement des destructeurs !



--
Ça dépend... Il y a des programmes qui sautent sur les mimes.
Ta remarque risque d'en froisser plus d'un.

Je ne vois pas de quoi tu parles.

-+- QL in GFA : "Gnus ne froisse pas que les cravates" -+-