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

Message d'erreur bizarre

17 réponses
Avatar
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

10 réponses

1 2
Avatar
Denis Beauregard
Le 26 Dec 2008 21:10:14 GMT, Pascale <chaton.tigre+
é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
Avatar
Olivier Miakinen
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().
Avatar
Pascale
Olivier Miakinen <om+ écrivait
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
Avatar
Olivier Miakinen
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 ?
Avatar
Pascale
Olivier Miakinen <om+ écrivait
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
Avatar
Olivier Miakinen
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(); }
?>
Avatar
mpg
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.
Avatar
Pascale
Olivier Miakinen <om+ écrivait
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
Avatar
slambert
"Pascale" <chaton.tigre+
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.
Avatar
Pascale
slambert écrivait
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
1 2