Ok, donc il y a cette implémentation PHP de Last.FM API qu'un mec a écrit et je l'utilise pour un petit projet. Son implémentation ne demande pas de données gzippées sur les serveurs Last.FM, j'ai donc décidé de modifier son implémentation pour qu'elle fonctionne avec gzip afin de réduire la bande passante. Je n'ai aucun problème à demander des données gzippées, cela fonctionne très bien et toutes les données sont compressées (vérifiées). Le problème est de le décoder. Je suis assez nouveau avec PHP et j'essayais de le décoder ces deux derniers jours mais rien de ce que j'ai essayé n'a fonctionné. : DDécoder gzip (en utilisant les sockets PHP)
Voici la fonction qui demande et reçoit les données. Si quelqu'un pouvait m'aider à faire cette fonction, décoder les données, je serais vraiment reconnaissant.
function send ($msg) {
// Send message over connection
fwrite($this->handle, $msg);
$response = array();
$line_num = 0;
while (!feof($this->handle)) {
$response[$line_num] = fgets($this->handle, 4096);
$line_num++;
}
// Return response as array
return $response;
}
où $ this-> poignée est
$this->handle = fsockopen($this->host, $this->port, $this->error_number, $this->error_string);
Merci =)
Ceci est valide, avec deux avertissements - gzdecode est tronc seul et il met inutilement toute la réponse en mémoire avant de le décoder. Le deuxième problème n'est pas si grave, mais le premier ... – Artefacto
Vous pouvez utiliser quelque chose comme 'gzinflate (substr ($ data, 10, -8))' au lieu de 'gzdecode ($ data)', mais les index peuvent être désactivé car la taille des en-têtes des données est variable. – Artefacto
J'ai déjà essayé d'utiliser gzdecode() et j'ai "Erreur fatale: Appel à la fonction indéfinie gzdecode()". Après google-ing, j'ai découvert que gzdecode() sera implémenté en php6? (sur localhost j'ai 5.3.0 installé). J'ai également essayé d'utiliser cette simple fonction que j'ai trouvée ici - http://php.net/manual/fr/function.gzdecode.php mais elle ne fait pas le travail ... – pootzko