OVH Cloud OVH Cloud

include (include)

9 réponses
Avatar
Le Fou
Salut,

Eternel débutant en PHP...
Que se passe-t-il si on a :

<?php
include 'toto.php' ;
?>

et que le fichier "toto.php" contient :
include 'toto.php' ;

Ca boucle indéfiniment ? Ca donne une erreur ? Ca explose ? ;-)

--
A'tchao

Le Fou
http://gloupclub.free.fr/
http://www.ffessm-cd84.com/
http://ehiller.club.fr/

9 réponses

Avatar
P'tit Marcel
Eternel débutant en PHP...
Que se passe-t-il si on a :

et que le fichier "toto.php" contient :
include 'toto.php' ;

Ca boucle indéfiniment ? Ca donne une erreur ? Ca explose ? ;-)


j'ai fait un script toto qui s'inclue lui-même, avec un echo avant
l'include.

* résultat en appel par le web:
- la page reste vide
- dans la log d'Apache:
[notice] child pid 4004 exit signal Segmentation fault (11)

* résultat par appel de php en CGI :
- stdout se remplit du echo précédant l'include
- apparemment, un process récursif infernal se met en marche
- ça finit par "Segmentation fault (core dumped)"


bref, on dirait que php n'anticipe pas le problème et que ça finit par
un overflow violent. sauf erreur, c'est pareil avec les appels récursifs
illimités, genre :
function bug($toto) { return bug($toto); }


eça
--
P'tit Marcel

Avatar
Cedric Olmanst
Salut,

Eternel débutant en PHP...
Que se passe-t-il si on a :

<?php
include 'toto.php' ;
?>

et que le fichier "toto.php" contient :
include 'toto.php' ;

Ca boucle indéfiniment ? Ca donne une erreur ? Ca explose ? ;-)


Pourquoi ne pas avoir essayé ? La doc ne dit rien à ce sujet, et les
commentaires des utilisateurs non plus, on dirait.

Si tu t'inquiètes parce que tu aurais peut-être mal structuré tes
include, il te suffit d'appeler include_once() ou require_once() au lieu
de respectivement include() ou require(), ça te permettra d'éviter tout
problème de ce genre.

cf. la merveilleuse doc de Php :
http://be2.php.net/manual/fr/function.include.php
http://be2.php.net/manual/fr/function.include-once.php
http://be2.php.net/manual/fr/function.require.php
http://be2.php.net/manual/fr/function.require_once.php

Cédric Olmanst

Avatar
ftc
bref, on dirait que php n'anticipe pas le problème et que ça finit par
un overflow violent. sauf erreur, c'est pareil avec les appels récursifs
illimités, genre :
function bug($toto) { return bug($toto); }


Pour éviter les appels récursifs de fonctions, il faut installer une
extension du style xdebug qui permet de contrôler les appels récursifs.

Avatar
Je suis content que vous me parliez de ça. Je l'ai trouvé sur le net et dans
mon bouquin.
Mais si je n'utilise, ( pas encore du moins ) require_once.

On est d'accord que si le site est bien monté, on ne devrait, normalement,
pas a avoir soin de require_once.

non ?

Si tu t'inquiètes parce que tu aurais peut-être mal structuré tes include,
il te suffit d'appeler include_once() ou require_once() au lieu de
respectivement include() ou require(), ça te permettra d'éviter tout
problème de ce genre.

cf. la merveilleuse doc de Php :
http://be2.php.net/manual/fr/function.include.php
http://be2.php.net/manual/fr/function.include-once.php
http://be2.php.net/manual/fr/function.require.php
http://be2.php.net/manual/fr/function.require_once.php

Cédric Olmanst


Avatar
Le Fou
Que se passe-t-il si on a :
<?php
include 'toto.php' ;
?>
et que le fichier "toto.php" contient :
include 'toto.php' ;
Ca boucle indéfiniment ? Ca donne une erreur ? Ca explose ? ;-)


Pourquoi ne pas avoir essayé ?


Parceque j'avais peur que ça explose ;-)
En vrai, parcequ'il se peut que quelqu'un ait déjà essayé et me fournisse
une réponse, m'évitant ainsi un éventuel crash m'obligeant à redémarrer ma
bécanne.
De plus, je ne suis pas assez calé en PHP pour savoir quelles instructions
rajouter dans mon code pour obtenir tel ou tel message d'erreur significatif
et j'aurais pu me retrouver avec une page vide (comme chez P'tit Marcel)
sans savoir ce qui s'était passé.
Là, P'tit Marcel a testé avec tout son savoir et a trouvé des réponses
éloquentes qui m'auraient échappées, merci à lui.


Si tu t'inquiètes parce que tu aurais peut-être mal structuré tes
include, (...)


Non, non, je ne m'inquiète pas, c'est juste une question que je me suis
posée en lisant des messages parlant d'include sur ce même NG.
Merci de vos réponses.
Je vais peut-être essayer maintenant que je sais que ça n'explose pas ;-)

--
A'tchao

Le Fou
http://gloupclub.free.fr/
http://www.ffessm-cd84.com/
http://ehiller.club.fr/


Avatar
Cedric Olmanst

On est d'accord que si le site est bien monté, on ne devrait, normalement,

pas a avoir soin de require_once.



non ?




Je pense en effet que si ce point a été un peu réfléchi avant de se

lancer directement, on ne devrait pas en avoir besoin.



Personnellement, j'avoue y avoir recours pour ne pas avoir à réfléchir à

ce genre de choses.



Cédric Olmanst

Avatar
ftc
Je suis content que vous me parliez de ça. Je l'ai trouvé sur le net et dans
mon bouquin.
Mais si je n'utilise, ( pas encore du moins ) require_once.

On est d'accord que si le site est bien monté, on ne devrait, normalement,
pas a avoir soin de require_once.

non ?


Ca dépend de la manière de structurer.

Si tu développes en objet par exemple avec une classe par fichier, tu
résous les dépendances en incluant les require_once en début de fichier
et si plusieurs classes ont besoin des même fichiers, on ne risque pas
d'inclure deux fois. Et pourtant, ce n'est pas ce que j'appelle mal
structurer son programme.

Avatar
Olivier Miakinen

Pourquoi ne pas avoir essayé ?


[...] parcequ'il se peut que quelqu'un ait déjà essayé et me fournisse
une réponse, m'évitant ainsi un éventuel crash m'obligeant à redémarrer ma
bécanne.


;-)

<troll>
Pas de danger : ni Apache ni PHP n'ont été écrits par Microsoft.
Alors, si tu les fais planter, ça n'entraîne pas l'OS avec.
</troll>

De plus, je ne suis pas assez calé en PHP pour savoir quelles instructions
rajouter dans mon code pour obtenir tel ou tel message d'erreur significatif
et j'aurais pu me retrouver avec une page vide (comme chez P'tit Marcel)
sans savoir ce qui s'était passé.
Là, P'tit Marcel a testé avec tout son savoir et a trouvé des réponses
éloquentes qui m'auraient échappées, merci à lui.


Là en effet cela peut se défendre. Note que tu aurais pu obtenir d'abord
une page vide, comme P'tit Marcel, et ensuite venir demander pourquoi.

Je vais peut-être essayer maintenant que je sais que ça n'explose pas ;-)


Bonne idée : rien ne vaut l'expérience que l'on peut faire soi-même.

--


Ce bug n'est pas résolu dans Microsoft Outlook Express 5.00.2615.200 ?


Avatar
Le Fou
Olivier Miakinen a écrit :
Le Fou a écrit (dans sa signature) :
--


Ce bug n'est pas résolu dans Microsoft Outlook Express 5.00.2615.200 ?


Non, ce bug n'est pas résolu dans MS OE 5.00.2615.200 + QuoteFix 1.19.2 !
Tu me lâches avec ça ou je t'envoie un script qui va faire exploser ta
bécanne ;-))

--
A'tchao

Le Fou
http://gloupclub.free.fr/
http://www.ffessm-cd84.com/
http://ehiller.club.fr/