Message d'erreur bizarre

Le
Pascale
Bonjour à tous, et meilleurs vœux, tout ça (-:

Fatal error, qu'il dit Je teste mes programmes (PHP5) et je me retrouve
de temps en temps avec le message d'erreur suivant :

Fatal error: Cannot redeclare add_url() (previously declared in
/home/lgv/www/valinfotest/func.php:4) in /home/lgv/www/valinfotest/func.php
on line 7

Explication : func.php est un programme qui contient toutes les fonctions
utiles au fonctionnement du site. On l'appelle systématiquement par un
include en début de programme, qu'on ait besoin ou non des fonctions en
question.
add_url() est tout bêtement la première fonction de la liste. Si on
l'enlève, c'est la deuxième qui ressort dans le message d'erreur.

Le truc bizarre, c'est que ce problème se produit de temps en temps,
sans que je sache pourquoi ni comment, et qu'il disparaît de même ! Quand
il se produit, tous les programmes qui appellent func.php se plantent. J'ai
essayé de remplacer l'include par un require, cela ne change rien. Changer
de navigateur n'avance à rien non plus.

Quelqu'un pour éclaircir se mystère ?
--
Pascale
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Denis Beauregard
Le #18225501
Le 26 Dec 2008 21:10:14 GMT, Pascale écrivait dans fr.comp.lang.php:

Bonjour à tous, et meilleurs v½ux, tout ça (-:

Fatal error, qu'il dit... Je teste mes programmes (PHP5) et je me retrouve
de temps en temps avec le message d'erreur suivant :

Fatal error: Cannot redeclare add_url() (previously declared in
/home/lgv/www/valinfotest/func.php:4) in /home/lgv/www/valinfotest/func.php
on line 7



Il doit y avoir 2 include dans le code de temps en temps.

Il faut faire include_once


Denis
Olivier Miakinen
Le #18225511
Bonjour,

Le 26/12/2008 22:10, Pascale a écrit :

Fatal error, qu'il dit... Je teste mes programmes (PHP5) et je me retrouve
de temps en temps avec le message d'erreur suivant :

Fatal error: Cannot redeclare add_url() (previously declared in
/home/lgv/www/valinfotest/func.php:4) in /home/lgv/www/valinfotest/func.php
on line 7

Explication : func.php est un programme qui contient toutes les fonctions
utiles au fonctionnement du site. On l'appelle systématiquement par un
include en début de programme, qu'on ait besoin ou non des fonctions en
question. [...]

Le truc bizarre, c'est que ce problème se produit... de temps en temps,
sans que je sache pourquoi ni comment, et qu'il disparaît de même ! Quand
il se produit, tous les programmes qui appellent func.php se plantent.



Malheureusement, le Père-Noël ne m'a pas apporté de nouvelle boule
de cristal, alors je ne peux que supposer... Parmi toutes les chaînes
d'inclusion de fichiers PHP, il n'y a pas un cas qui ferait que func.php
serait inclus deux fois ? Par exemple un truc de ce genre :

A.php -> include(B.php)
B.php -> if (test) include(C.php)
C.php -> include(func.php)
xxx.php -> include(func.php) ; include(A.php)

(ou plus simple, ou plus complexe)

J'ai essayé de remplacer l'include par un require, cela ne change rien.



Tu as déjà entendu parler de include_once() et require_once() ?

Changer de navigateur n'avance à rien non plus.



Euh... le fait que tu te sois posé la question montre que tu n'es pas
encore au clair entre ce qui se passe sur le serveur et ce qui se passe
dans le navigateur. :-(

Quelqu'un pour éclaircir ce mystère ?



Non, mais pour le résoudre oui : include_once().
Pascale
Le #18225841
Olivier Miakinen news:49554bd6$:

Euh... le fait que tu te sois posé la question montre que tu n'es pas
encore au clair entre ce qui se passe sur le serveur et ce qui se passe
dans le navigateur. :-(



Si, mais je préfère toujours vérifier. Je sais aussi que le cache des
navigateurs produit parfois des trucs curieux (on peut le vider, mais je
suis une feignasse).

Non, mais pour le résoudre oui : include_once().



Exact, include_once ou require_once résolvent le problème. Néanmoins, je ne
m'explique pas que ce problème soit apparu de manière aléatoire sur
certains programmes (inchangés depuis des semaines, testés et retestés,
et où, j'ai vérifié, mon fameux func.php n'est pourtant appelé qu'une
fois).
Merci à Denis et à toi.

--
Pascale
Olivier Miakinen
Le #18226101
Le 26/12/2008 23:55, Pascale a écrit :

[...] je ne
m'explique pas que ce problème soit apparu de manière aléatoire sur
certains programmes (inchangés depuis des semaines, testés et retestés,
et où, j'ai vérifié, mon fameux func.php n'est pourtant appelé qu'une
fois).



Juste pour savoir...

Tu as un fichier, mettons xxx.php, qui inclut func.php.
1) xxx.php n'inclut aucun autre fichier que func.php ?
2) xxx.php n'est inclus dans aucun autre fichier ?
3) l'inclusion de func.php n'a pas lieu dans une fonction ?
Pascale
Le #18230731
Olivier Miakinen news:4955680b$:

Tu as un fichier, mettons xxx.php, qui inclut func.php.
1) xxx.php n'inclut aucun autre fichier que func.php ?



Non (mais j'ai vérifié que func.php n'était appelé qu'une fois par 1
programme).

2) xxx.php n'est inclus dans aucun autre fichier ?



Si, ça peut.

3) l'inclusion de func.php n'a pas lieu dans une fonction ?



A y est, mes 2 neurones sont pétés, je comprends pas cette question.

--
Pascale
Olivier Miakinen
Le #18230911
Le 27/12/2008 21:34, Pascale a écrit :

Tu as un fichier, mettons xxx.php, qui inclut func.php.
1) xxx.php n'inclut aucun autre fichier que func.php ?



Non (mais j'ai vérifié que func.php n'était appelé qu'une fois par 1
programme).



En disant ça, tu distingues les « programmes » (pages appelables
directement via une URL) des autres fichiers PHP, lesquels peuvent
être inclus dans des « programmes » ?

2) xxx.php n'est inclus dans aucun autre fichier ?



Si, ça peut.



Ah. Donc cela contredit ce que je pensais ci-dessus. Mais bon, je
suppose que tu as vérifié que dans toutes les chaînes d'inclusion il
n'y en avait aucune incluant deux fois func.php.

Pour être sûr de ça... ça veut dire que si xxx.php inclut yyy.php et
zzz.php, alors parmi ces trois fichiers (xxx.php, yyy.php et zzz.php)
il y en a *au plus un* qui inclut directement func.php. Et ceci s'étend
pour tout ensemble de N fichiers s'incluant les uns les autres.

3) l'inclusion de func.php n'a pas lieu dans une fonction ?



A y est, mes 2 neurones sont pétés, je comprends pas cette question.



<?php
function truc()
{
include("func.php");
}

...

if (n >= 3) { truc(); chose(); }
if (n <= 3) { truc(); bidule(); }
?>
mpg
Le #18230921
Le (on) samedi 27 décembre 2008 21:34, Pascale a écrit (wrote) :

3) l'inclusion de func.php n'a pas lieu dans une fonction ?



A y est, mes 2 neurones sont pétés, je comprends pas cette question.



Je comprends la question comme ça : n'y a-t-il pas dans ton code


function blabla() {
include "func.php";
// des trucs
}

et la fonction blabla n'est-elle pas appelée une fois ou plus, selon les
fois ? Ce qui expliquerait la caractère fluctuant de l'erreur...

Manuel.
Pascale
Le #18233791
Olivier Miakinen news:4956942b$:

En disant ça, tu distingues les « programmes » (pages appelables
directement via une URL) des autres fichiers PHP, lesquels peuvent
être inclus dans des « programmes » ?



Oui : la plupart des fichiers inclus sont des .inc (d'accord, ce n'est pas
le cas de func.php)...

2) xxx.php n'est inclus dans aucun autre fichier ?



Si, ça peut.



Ah. Donc cela contredit ce que je pensais ci-dessus. Mais bon, je
suppose que tu as vérifié que dans toutes les chaînes d'inclusion il
n'y en avait aucune incluant deux fois func.php.



Oui.

Pour être sûr de ça... ça veut dire que si xxx.php inclut yyy.php et
zzz.php, alors parmi ces trois fichiers (xxx.php, yyy.php et zzz.php)
il y en a *au plus un* qui inclut directement func.php. Et ceci s'étend
pour tout ensemble de N fichiers s'incluant les uns les autres.



C'est bien comme ça que je le comprends.
L'erreur pourrait-elle se produire, si, auparavant, j'ai chargé une autre
page aaaa.php incluant yyyy.inc (disons que c'est lui qui appelle func.php)
et un ou plusieurs autres fichiers quelquechose.inc (je suis une feignasse,
j'utilise pas mal include pour appeler des morceaux de code réutilisés dans
plusieurs programmes.)

3) l'inclusion de func.php n'a pas lieu dans une fonction ?




<?php
function truc()
{
include("func.php");
}
if (n >= 3) { truc(); chose(); }
if (n <= 3) { truc(); bidule(); }
?>



Donc la réponse est non.

--
Pascale
slambert
Le #18240751
"Pascale"
Oui : la plupart des fichiers inclus sont des .inc



Attention

Les .inc ne sont generalement pas interprétés, ce qui veut dire qu'en cas
d'appel direct, ton code sera visible.

Si c'est effectivement le cas, il est fortement conseillé de les renommer en
.php .

S.L.
Pascale
Le #18252311
slambert news:4957e6c1$0$2004$:

Les .inc ne sont generalement pas interprétés, ce qui veut dire qu'en
cas d'appel direct, ton code sera visible.



Effectivement, mais bof, il n'y a rien de bien confidentiel dans ce code.

--
Pascale
www.valinfo.org - Calendrier et annuaire de la vie associative locale
Publicité
Poster une réponse
Anonyme