Désolé pour la longueur mais j'expose ici un problème qui m'a déjà couté 100h de travail
Résumé
Je n'arrive pas a effectuer une installation de TikiWiki 4.1 qui utilise Php orienté objet dans un environnement Windows "au top". Le problème semble venir de la prise en compte non assurée par PDO du serveur mysqli de cette installation EasyPhp 5.3.0.
- Il semblerait que avec Easyphp 5.3.0 (Windows) seule l'extension php mysqli soit supportée (Serveur mysql = mysqli) ce qui serait assez normal, mais peut perdre certaines applications écrites pour le serveur d'extension php mysql.
- Corrélativement l'objet PDO défini par l'extension associée "php_pdo_mysql.dll" ne semble pas supporter pas mysqli (New PDO(mysqli:...) retourner l'erreur "DRIVER non TROUVE".
- la dll d'extension "php_pdo_mysql.dll" serait donc purement php extension=mysql ce qui rendrait toute connexion mysqli impossible et générateur des anomalies citées dans le détail de ce texte.
- Comme je n'ai rien trouvé de concret sur ce sujet, il a peut être une erreur de nature différente dans mon installation et une manière d'accéder au serveur mysqli via l'extension "php_pdo_mysql.dll" pour laquelle je n'ai pas trouvé de documentation.
- Indépendamment mais consécutivement, en tout état de cause, le fait qu'une création "new PDO" sur un serveur mysql:... (avec un PHP.INI définissant l'extension "php_pdo_mysql.dll" retourne un objet NULL sans erreur n'est pas normal. Les applis que j'installe (Tikiwiki) ne testant pas immédiatement l'objet retourné mais faisant totalement confiance à la gestion d'erreur, le retour d'un objet NULL n'étant pas une erreur et constituant un cas ne pouvant être gérée en PDOExeption, produit un crash "en quenouille" des applications, singulièrement difficile à trouver quand on a pas encore des outils suffisants.
J'utilise et commence à participer au développement de TikiWiki.
L'installation chez OVH (mysql5-4.240 et php extension mysql) en version 3.3 puis l'upgrade en version 4.1 se sont passées comme une lettre à la poste (mieux encore). La version 4.1 nécessite PHP5 et utilise PDO et est totalement orientée objet, il était prévu que cette version aille au delà avec ADODB (mais la connexion n'a pas été terminée).
Cette installation réalisée directement chez OVH est très bien supportée avec php 5.2.? et MYSQL5-4.240 sous Linux a fonctionné immédiatement (le temps du FTP (9500 fichiers)).
Par contre tout développement est impossible parce que j'utilise un hébergement mutualisé.
J'ai donc commencé la mise en place sur ma machine qui tourne actuellement sous win XP SP3 avec Easyphp 5.3.0. et pour développer TikiWiki j'ai installé SVN (serveur) et Xdebug enfin Eclipse. Je tourne avec Apache, php et Mysql depuis près de 4 ans et j'ai réalisé les upgrades régulièrement.
Configuration actuelle du système Windows XP SP3
* Serveur: MySQL host info: localhost via TCP/IP
* Version du serveur: 5.1.37-community-log
* Version du protocole: 10
* Utilisateur: root@localhost
* Jeu de caractères pour MySQL: UTF-8 Unicode (utf8)
Serveur web
* Apache/2.2.13 (Win32) DAV/2 mod_ssl/2.2.13 OpenSSL/0.9.8k SVN/1.6.6 PHP/5.3.0
* Version du client MySQL: mysqlnd 5.0.5-dev - 081106 - $Revision: 1.3.2.27 $
* Extension PHP: mysqli
phpMyAdmin
* Version: 3.2.1
Problème(s) rencontrés après configuration Apache et php adaptée
PhpMyAdmin permet d'accéder parfaitement ainsi que mes sites Joomla (1.1.15) et mes propres applis, mais elle n'utilisent pas PDO.
- Installation vierge de TikiWiki échoue en quenouille (des erreurs mal gérées ? , qui n'arrêtent pas l'appli...)
- Le transfert (pratiqué plusieurs fois en version antérieure de Tiki, utilisant connect mysql) consiste à tranférer la base en SQL depuis l'environnement Linux et utiliser le patch (qq pb avec .htaccess) et la config pour les adresses locales lui abouti à deux issues possibles (après test) :
- Lors de la création de l'objet PDO $mydb=New PDO( param1, param2, pram3) (sachant que l'environnement Easyphp semble bien obligatoirement en serveur MYSQL mysqli (php extension = mysqli)) si param1 appelle le serveur "mysqli:.... on génère l'erreur "Driver absent" l'objet erreur (que l'on peut dumper avec xdebug dans le traitement d'erreur (try {....} catch( PDOException $e ) {var_dump($e) etc.} étant correct dans son contenu.
- La création d'objet PDO avec le serveur "mysql:...." retourne toujours un objet NULL. Là il semblerait bien qu'il y ait une belle anomalie qaund le serveur MYSQL est mysqli. en effet l'objet retourné est toujours NULL sans erreur signalée. Comme ce retour de PDO n'est pas prévu par Tikiwiki le crash intervient plus loin lors du "session_start()" qui évidemment ne va pas trouver à un moment une procédure ( dans l'open et un "singleton" pattern)
nota : je n'ai pas trouvé encore de doc assez précise sur PDO et je n'ai pas assez développé en C++ pour ne pas un peu... user le soleil pour chercher, d'où mon appel à l'aide, car j'ai déja 100h dans les bottes sur cette installation
Conclusion
Cette situation me parait résulter d'une absence de support du serveur mysqli "théoriquement assuré" par l' [extension=php_pdo_mysql.dll] alors que l'on attendrait trouver une extension "php_pdo_mysqli.dll" dans php/ext.
Il est à noter que la doc Mysql dernière version précise qu'en version pleine on doit trouver, pour les extensions, deux répertoires : php/ext/mysql et php/ext/mysqli. Par conséquent Easyphp5.3.0 semble présenter une version purement mysqli ce qui est parfaitement logique. Par contre la dll PDO associée est-elle à jour ou en manque-t-il une ?
Il est évident que dans l'environnement Linux d'OVH (mutualisé) ça marche (quoique le niveau ne soit pas 5.3 mais encore 5.2 et les entry sont bien modifiées et que le produit ait bien évolué de 5.2 à 5.3).
A l'aide, mon travail est totalement arrêté depuis près de trois semaines sur ce problème.
Merci d'avance
trebly