Installation sous Linux et pb PHP
Envoyé par:
L'Arcandier
()
Date: lundi 25 septembre 2006 15:41:58
Bonjour à tous, je viens d'installer OpenFlyers 1.3.0 sur un PC équipé de Linux. Toutefois, ça m'a pris un après-midi pour trouver le petit truc qui l'empêchait de fonctionner : en fait cela venait du fichier Span.php fourni avec le package Date pour Pear. L'effet est que l'installation se déroulait correctement mais que par la suite, une page blanche s'affichait obstinément dans le navigateur en lieu et place de l'écran de connexion.
Je n'ai rien déposé sur le gestionnaire de bugs car cela ne concerne pas le fonctionnement d'OpenFlyers lui-même. Si j'ai eu tort, merci de me le faire remarquer.
Tout d'abord, la distribution utilisée est la Fedora Core 4 avec les paquets suivants :
php-pear-5.0.4-10.5
php-mysql-5.0.4-10.5
php-5.0.4-10.5
httpd-2.0.54-10.4
mysql-4.1.20-1.FC4.1
mysql-server-4.1.20-1.FC4.1
J'ai également installé ou modifié les paquets PEAR afin d'avoir les mêmes versions qu'indiqué dans la documentation en ligne (j'ai donc Date 1.4.3).
Donc, à force d'"echo 'coucou';" j'ai fini par cerner le problème : à la ligne 667 du fichier Date.php (fourni avec le paquet PEAR du même nom), l'exécution du code s'arrête à la création d'une instance d'un objet Date_Span :
$this->subtractSpan(new Date_Span($sec));
Cette classe se trouve dans le fichier Date/Span.php. Voici son constructeur :
function Date_Span($time = 0, $format = null)
{
$this->set($time, $format);
}
En mettant des echo quelque chose un peu partout, je me suis aperçu que le constructeur était appelé un grand nombre de fois. Après avoir essayé en vain de trouver une explication rationnelle à cette bizarrerie, j'ai trouvé la réponse un peu par hasard : à la fin du fichier Span.php, dans la classe Date_Span, se trouve cette fonction que je mets avec son commentaire :
/**
* Returns a copy of the object (workarround for PHP5 forward compatibility).
*
* @return object Date_Span Copy of the object.
*/
function __clone() {
$c = get_class($this);
$s = new $c;
$s->day = $this->day;
$s->hour = $this->hour;
$s->minute = $this->minute;
$s->second = $this->second;
return $s;
}
J'ai mis ça en commentaire et tout a fonctionné.
Il s'agit donc apparemment d'un bug du paquet Date 1.4.3 qui ne peut pas fonctionner avec PHP 5. Ceci dit je ne suis pas du tout versé dans les subtilités de PHP alors peut-être que l'un d'entre vous trouvera une solution plus élégante :-)
Oh, j'allais oublier : OpenFlyers a visiblement été écrit sous Windows [bouh la honte :-) ] donc pour que les caractères accentués soient correctement gérés par le serveur Apache, j'ai dû commenter la ligne "AddDefaultCharset UTF-8" dans httpd.conf afin qu'il utilise le bon jeu de caractères ISO-8859-1. Mais à part ça, ça semble bien fonctionner.
Sous Firefox 1.0.7 aucun problème, par contre avec Opera 9 les titres des menus "cahier instructeur" et "liste de membres" débordent un peu.
Voilà, ça c'était chez moi pour tester, le week-end prochain j'essaierai sur le PC de l'aéroclub, un Celeron 500 MHz avec 192 Mo de RAM que j'ai débarrassé de Windows 98 et muni de la Fedora Core 5, donc une autre version que chez moi. Si vous n'avez pas de mes nouvelles c'est que ça aura marché :-)
Bons vols !