Comment perdre son temps avec AMFPHP
Le titre est explicite...
Pour un client, j'ai du réinstaller une application Flex pour y faire des modifications. Cette dernière tourne avec AMFPHP pour aller récupérer des données dans la base de données qui lui est dédiée.
Je réinstalle donc le tout, et bien entendu, ça ne fonctionnait pas... J'ai passé plusieurs heures à faire des tests sur tout et n'importe quoi. Premier problème, j'ai installé apache/php via macports et j'ai une version 5.3 de php, qui pose quelques problèmes avec les expressions régulières, les fonctions eregi_* n'étant plus prises en charge. J'ai donc d'abord du changer un ligne dans le fichier /amfphp/amf-core/util/MethodTable.php ligne 395 :
ceci
$comment = eregi_replace("[\r\t\n ]+", " ", trim($comment));
devenant
$comment = preg_replace("[\r\t\n ]i", " ", trim($comment));
Mais mon problème restait entier... En fait, tant que je récupère des données qui sont simples, tout va bien, le retour est ok. Dès que le contenu est un peu fourni, genre + de 200 caractères dans une chaîne, alors rien ne va plus, je n'ai jamais de retour.
J'ai fini par bien regarder et faire des tests dans le fichier amfphp/gateway.php et c'est à cause de l'extension AMF native en C que j'ai eu tout ces problèmes (je l'avais installée avec macports également). Il y a dans le gateway.php une ligne à décommenter qui permet de désactiver cette extension :
//Explicitly disable the native extension if it is installed $gateway->disableNativeExtension();
Il semblerai que tout soit maintenant rentré dans l'ordre. Je pense que ça réglera également mes problèmes avec le module "Services" de Drupal, qui permet de récupérer des données via AMFPHP et qui me posait exactement le même problème.
ressources :
AMFPHP is dead
[EDIT 26 août 2010]
Mettant en place une appli sensée être en connexion avec Drupal, je me suis à nouveau retrouvé confronté au même problème, c'est à dire un retour de données uniquement si il n'y a pas de longues chaines de caractères :
Messages dans l'appli Charles :
AMF data is incomplete (0 bytes of 0 bytes). Please check the recording limits in the Recording Settings.
C'est en fouillant encore dans le module amfphp de drupal (/sites/all/modules/services/servers/amfphp/) et plus précisément le fichier amfphp.inc que je me suis rendu compte qu'une passerelle par défaut était surdéfinie dans le fichier /sites/all/modules/services/servers/amfphp/overrides/AmfphpGateway.php et que cette dernière était utilisée par les appli flash/flex qui communiquement avec drupal via amfphp.
Bref. C'est dans le fichier amfphp.inc que j'ai également du rajouter la même directive (disableNativeExtension) à la ligne 24 pour que tout rentre dans l'ordre.
[/EDIT]