Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 02/11/2013, à 03:20

Crone123

[Résolu] MySQL, problème de type pour un tracker torrent

Bonjour,
J'essaie de créer un tracker privé avec xbt, j'ai pas une énorme connexion sur mon site loin de là, donc plutôt que de tout mettre en direct, je veux proposer un système de torrent ou les membres peuvent partager leurs fichiers joints via torrent exactement de la même façon qu'en direct, histoire d’alléger le trafic de ma connexion (ADSL quoi...)
En gros:
→ Upload du .torrent → Sans pb.
→ Récupération du hash → Sans pb
→ Enregistrement dans le tracker (ou plutôt sa BDD) → Problème
Le tracker est fonctionnel en soit, mais uniquement lorsque j'entre manuellement le hash dans la BDD.

En fait, le champ "info_hash" du tracker (dans MySQL) est de type binary 20.
Donc voilà le problème: Quand je veux ajouter le torrent au tracker, avec son hash, comme le hash est une string standard de 40 caractères (probablement utf8), lorsque je le met dans la BDD, il est tronqué a 20 caractères seulement, donc évidement ça ne fonctionne pas.
J'utilise transmission-show pour récupérer le hash, la récupération est faite sans problème, c'est uniquement l'enregistrement dans la BDD qui pose un problème.

Quelqu'un pourrait m'aider pour convertir ma chaine en un truc qui rentre? (en PHP)
Merci smile

Dernière modification par Crone123 (Le 02/11/2013, à 22:38)

Hors ligne

#2 Le 02/11/2013, à 11:03

tiramiseb

Re : [Résolu] MySQL, problème de type pour un tracker torrent

Pourquoi ne pas agrandir le champ "info_hash" de ta base !?

Je ne comprends pas ton approche. Comment espères-tu convertir une chaîne de 40 caractères en une chaîne de 20 caractères sans perdre des infos ?

Hors ligne

#3 Le 02/11/2013, à 22:26

Crone123

Re : [Résolu] MySQL, problème de type pour un tracker torrent

Ben en fait:
Dans PhpMyAdmin, faire un copier/coller de la chaine de 40 caractère dans le truc de 20, ça marche, et le tracker autorise le torrent.
Or, la même chose depuis une requête SQL standard en PHP ça ne prends que la moitié.

J'ai déjà essayé d'agrandir ou de changer le type de la zone, mais que ce soit du binary 40, varchar 40 ou char 40, le tracker ne le prends pas, il faut que ça soit du binary 20, avec la clé complète dedans.

C'est donc ce que je me demande: Pourquoi depuis PhpMyAdmin ça passe, et depuis PHP ça ne passe pas.

Quand j'ajoute depuis PhpMyAdmin, dans la case "Fonction" j'ai UNHEX qui se met, je sais pas si ça joue, mais en tout cas ça rentre sans problème.
Merci smile

EDIT: J'ai essayé d'entrer un HASH au pif avec PhpMyAdmin, et voilà ce que je vois dans l'énoncé d'insertion:

UNHEX('4a4a4a4a4a4a4a4a5e5e5e5e5e6a6a6a6a6a9b8b')

(note, ce hash ne correspond normalement a aucun torrent, c'est moi qui ai tapé du random au clavier)
Je vais essayer en rajoutant UNHEX dans ma ligne SQL pour voir smile

EDIT2: J'ai finalement essayé avec UNHEX, et la clé de 40 caractères rentre entièrement dans le binary 20, donc le problème est résolu smile
Merci smile

Dernière modification par Crone123 (Le 02/11/2013, à 22:38)

Hors ligne

#4 Le 03/11/2013, à 13:23

Morgiver

Re : [Résolu] MySQL, problème de type pour un tracker torrent

tiramiseb a écrit :

Pourquoi ne pas agrandir le champ "info_hash" de ta base !?

Je ne comprends pas ton approche. Comment espères-tu convertir une chaîne de 40 caractères en une chaîne de 20 caractères sans perdre des infos ?

+1

Si ça marche pas c'est qu'il y a peut-être une ligne de code qui limite à 20 caractères.

Hors ligne

#5 Le 03/11/2013, à 15:08

tiramiseb

Re : [Résolu] MySQL, problème de type pour un tracker torrent

Crone123 a écrit :

Quand j'ajoute depuis PhpMyAdmin, dans la case "Fonction" j'ai UNHEX qui se met, je sais pas si ça joue, mais en tout cas ça rentre sans problème.
Merci smile

EDIT: J'ai essayé d'entrer un HASH au pif avec PhpMyAdmin, et voilà ce que je vois dans l'énoncé d'insertion:

UNHEX('4a4a4a4a4a4a4a4a5e5e5e5e5e6a6a6a6a6a9b8b')

(note, ce hash ne correspond normalement a aucun torrent, c'est moi qui ai tapé du random au clavier)
Je vais essayer en rajoutant UNHEX dans ma ligne SQL pour voir smile

EDIT2: J'ai finalement essayé avec UNHEX, et la clé de 40 caractères rentre entièrement dans le binary 20, donc le problème est résolu smile
Merci smile

En effet, si tu ne nous donnes pas toutes les informations, on ne peut pas te répondre correctement !

Tu nous parles d'une "string standard de 40 caractères", alors qu'en fait la valeur que tu veux stocker c'est une représentation (sous forme de string) d'un nombre hexadécimal (chiffre et lettres de a à f). Donc en effet, tu peux "raccourcir" cette représentation en la stockant au format binaire ; par exemple, le nombre hexadécimal "3F" (dont la représentation utilise donc deux caractères) est égal à 63 en base 10, qui peut être stocké en un seul octet en base 2...

Hors ligne

#6 Le 07/11/2013, à 20:11

Crone123

Re : [Résolu] MySQL, problème de type pour un tracker torrent

Désolé si j'ai manqué d'informations, je parlais d'un hash d'un torrent donc je pensais avoir été assez clair.
Je n'avais jamais manipulé ce genre de types avec MySQL donc pour moi c'était assez nouveau donc voilà...
En tout cas, ça fonctionne, merci quand même smile

Hors ligne