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

Cannot redeclare class : require_once include twice

1 réponse
Avatar
Laurent Mauri
Bonjour à tous,

J'ai un problème avec mon installation de PHP.

Lorsque je fais deux require_once du même fichier, une fois avec le
chemin relatif et une autre fois avec le chemin absolu, require_once
inclut deux fois le fichier, ce qui cause une erreur fatale "Cannot
redeclare class".

essayé avec apache 2 mais j'ai toujours le même résultat.

En utilisant le client en ligne de commande cela fonctionne
correctement, je suppose donc que cela vient du module apache
libphp5.so

J'ai essayé avec apache2 mais cela ne fonctionne pas non plus.

Avez vous une idée de la source du problème ?

Merci d'avance

----------------------------------------------------------------
Configuration:
SunOS devs0004 5.10 Generic_137137-09 sun4u sparc SUNW,Sun-Fire-V240

PHP 5.2.10
Configure Command => './configure' '--with-libxml-dir=/usr/local' '--
with-mysql=/usr/local/mysql5136/' '--enable-track-vars' '--enable-
libgcc' '--enable-trans-sid' '--enable-ftp' '--enable-pcntl' '--enable-
sockets' '--enable-soap' '--with-apxs2=/usr/apache2/bin/apxs' '--with-
zlib-dir=/usr/local/lib' '--with-pdo-mysql=/usr/local/mysql5136' '--
with-mcrypt=/usr/local/bin' '--enable-debug'

Apache 1.3.41

----------------------------------------------------------------
file1.php
<?php

require_once('./file2.php');
require_once('/absolute/path/to/file1.php');

$a = new A();
$a->foo();
?>
----------------------------------------------------------------
file2.php
<?php
class A
{
public function foo() { echo 'Foo'; }
}
?>
----------------------------------------------------------------

1 réponse

Avatar
Olivier Miakinen
Bonjour,

Le 14/09/2009 14:56, Laurent Mauri a écrit :

J'ai un problème avec mon installation de PHP.

Lorsque je fais deux require_once du même fichier, une fois avec le
chemin relatif et une autre fois avec le chemin absolu,



Plutôt avec *un* chemin relatif et avec *un* chemin absolu.

require_once
inclut deux fois le fichier, ce qui cause une erreur fatale "Cannot
redeclare class".



Ça me semble tout à fait normal, car il est très difficile sur la base
du seul nom de deviner quel fichier sera vraiment accédé.

Imagine par exemple que sous la racine / tu aies un répertoire /a et un
sous-répertoire /a/a, avec deux fichiers /a/f.php et /a/a/f.php, puis
que tu fasses un include_once("../a/f.php"). Si tu es sous / ou sous /a
(ou sous /b), c'est le premier fichier qui sera lu, tandis que si tu es
sous /a/a (ou sous /a/b) ce sera le second.

Pire : si tu as un lien (symbolique ou non) entre /a/b/c.php et
/z/y/x.php, tu peux alors accéder à l'un avec le nom de l'autre, et
ceci vaut dans le cas de liens symboliques dans tous les sens entre
des répertoires.

En utilisant le client en ligne de commande cela fonctionne
correctement



Eh bien c'est ça qui me semble anormal.

----------------------------------------------------------------
file1.php
<?php

require_once('./file2.php');
require_once('/absolute/path/to/file1.php');



Je suppose qu'il faut lire file2 au lieu de file1 ici ?


Quoi qu'il en soit, et à moins d'un avis plus éclairé que le mien, je
te suggère de choisir une convention d'appel pour chaque fichier et de
t'y tenir.