logo Homepage
Pages: [1]
  Imprimer  
Auteur Fil de discussion: (Resolu) Transfert de fichiers via IRC en python3 : Probleme DCC SEND  (Lu 10200 fois)
neibb

Profil challenge

Classement : 260/54681

Membre Junior
**
Hors ligne Hors ligne
Messages: 76


Voir le profil
« le: 24 Avril 2018 à 18:12:03 »

Bonjour,

Je ne sais pas si y'en a qui sont chaud de la programmation, enfin voila, je coince lors de la creation d'un bot en python.
La communication se fait nickel, la plupart des fonctions sont operationnelles, seulement, lorsque je souhaite envoyer un fichier rien ne se passe... Aucune reponse, mais le programme continue de fonctionner normalement.

Je vais essayer de resumer un peu mon code en gardant ce qui me semble utile ici :

Code:
#!/usr/bin/python3
# -*- coding: utf-8 -*-

import socket

# On determine le reseau sur lequel on va se connecter.
ircsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server = "chat.freenode.net" # Server
BUFFER_SIZE = 1024

# Preparation
channel = "#test" # Channel
botnick = "test" # Nick
adminname = "admin"

# Connection au reseau.
ircsock.connect((server, 6667)) # 6697 pour utiliser ssl ou sinon 6667.
ircsock.send(bytes("USER "+ botnick +" "+ botnick +" "+ botnick + " " + botnick + "\n", "UTF-8")) # Identification du bot.
ircsock.send(bytes("NICK "+ botnick +"\n", "UTF-8")) # Assigne le nick du bot

# Rejoindre le cannal.
def joinchan(chan):
ircsock.send(bytes("JOIN "+ chan +"\n", "UTF-8"))
ircsock.send(bytes("PRIVMSG "+ chan+ " :plop!\n", "UTF-8"))
ircsock.send(bytes("PRIVMSG "+ adminname + " :En attente.\n", "UTF-8"))

# Envoyer un message.
def sendmsg(msge, target=channel): # sends messages to the target.
ircsock.send(bytes("PRIVMSG "+ target +" :"+ msge +"\n", "UTF-8"))
# Ici tout marche bien.

# Envoyer un fichier.
def send(fichier) :
ircsock.send(bytes("DCC SEND "+ adminname + " " + fichier +"\n", "UTF-8"))

joinchan(channel)


def rcvmsg() :
        ircmsg = ircsock.recv(2048).decode("UTF-8")
        ircmsg = ircmsg.strip('\n\r')

# Ne pas oublier le fameux ping pong...
        if ircmsg.find ("PING :") != -1:
       ping()    # Bon, la, je met pas la fonction pour repondre au ping, elle existe bien

#  Recuperer le message ainsi que son expediteur.
        elif ircmsg.find("PRIVMSG") != -1:
       name = ircmsg.split('!',1)[0][1:]
       message = ircmsg.split('PRIVMSG',1)[1].split(':',1)[1]
       print(message)


                messge = message.split()  # Et voila! Effectivement c'etait important!

       if name == adminname and messge[0] == "send" :
       if len(messge) > 1 :
        send(messge[1])
# C'est ici que ca ne va pas... j'ai aussi essaye :

#        ircsock.send(bytes("DCC SEND "+ adminname + " :fichier\n", "UTF-8"))
#        ircsock.send(bytes("SEND "+ adminname + " :" + messge[1] + "\n", "UTF-8"))
#        ircsock.send(bytes("PRIVMSG "+ adminname +" :/dcc send "+ adminname + " " + messge[1] +"\n", "UTF-8"))
#         ircsock.send(bytes("DCC SEND "+ adminname + " :" + messge[1] +"\n", "UTF-8"))
#        ircsock.send(bytes("DCC SEND "+ adminname + " " + messge[1] +"\n", "UTF-8"))


joinchan(channel)
while rcvmsg() != exitcode :
rcvmsg()

# Voila, comme ca ca doit etre un peu mieux pour comprendre.

Voila, la fonction send() ne sert a rien...

J'ai vu aussi que irclib permettait d'utiliser dcc, mais pas evident de trouver de la doc, la plupart renvoie a des tutos pour pour le telechargement sur des servers xdcc...(pas bien! ) Enfin bref.

Est ce que quelqu'un a deja fait?
Ou alors peut etre que j'ai fait une erreur evidente, mais pour l'instant je ne trouve pas.

Merci d'avance!

EDIT : sur le meme principe, j'ai egalement cree une fonction mail() qui permet d'envoyer un fichier via smtp.
L'ajout de '/dcc send' ici est pour racourcir un peu les manips (ouvrir boite mail, puis dl piece jointe)
La comprehension de dcc permettra aussi la possibilite inverse : qui dit envoie dit aussi recoit.
En gros je pourrais m'en passer mais j'aimerais bien l'avoir quand meme.

EDIT2: Voila, j'ai un peu clarifie mon code, j'espere que ca va mieux, desole.
« Dernière édition: 29 Avril 2018 à 00:29:33 par neibb » Journalisée

neibb.
the lsd
Administrateur

Profil challenge

Classement : 181/54681

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 3096

poulping for fun & profit


Voir le profil WWW
« #1 le: 24 Avril 2018 à 19:16:00 »

Hello,

Si on regarde un peu la condition pour envoyer ton fichier :

Code: (python)
if name == adminname and messge[0] == "send" :

A priori, name à l'air d'être bon, et doit donc correspondre à "admin" (cf la variable adminname plus haut dans le code).
Par contre, ta variable message...

Code: (python)
message = ircmsg.split('PRIVMSG',1)[1].split(':',1)[1]

Tu as donc ircmsg qui doit correspondre à quelque chose comme ceci : :Macha!~macha@unaffiliated/macha PRIVMSG #botwar :send

ircmsg.split('PRIVMSG',1)[1] sera donc la partie à droite de PRIVMSG, soit :  #botwar :Test response

Ensuite, tu splittes sur le ":" et tu gardes la partie droite grâce à split(':',1)[1]. Ca nous donne donc : send

Doooooonc, message correspond à "send"

Si on reprend ta condition de base :

Code: (python)
if name == adminname and messge[0] == "send" :

message[0] correspond à l'index 0 de la variable messge, soit le caractère "s". Ainsi, ça équivaut à "s" == "send", ce qui est par définition faux.

Tu ne valides donc jamais la condition et n'appelles pas la fonction send.

Au passage, même en fixant ce souci, tu essaie désespérément d’utiliser la variable messge... qui n'existe pas, vu qu'il manque un "a"

Ensuite, quelques remarques, de ce que j'en vois :

 - tu créés ta socket
 - tu settes quelques variables
 - tu te connectes au serv et envoie les infos kivonbien
 - tu définis quelques fonctions
 - tu appelles joinchan
 - tu récupères 2048 octets
 - une fois ces 2048 octets récupérés, tu fais un truc (ping ou envoi de message en fonction des conditions)
 - et... bah c'est tout

Tu ne boucles pas, donc de base, ça ne devrait pas pouvoir fonctionner très longtemps (juste le temps des 2048 octets à recevoir, ou d'une coupure de la socket). Un coup de while True devrait aider à ce que ton bot survive

Pourquoi mettre les fonctions en plein milieu de ton code ? ^^' Soit au début, soit à la fin, soit dans un fichier séparé, mais là, c'est moche ^^

Je sais, je sais, la programmation objet, c'est compliqué... mais python est fait pour ça, autant l'utiliser, et puis si tu t'y mets pas de suite, tu t'y mettras jamais. Je connais des gens qui dev bien depuis 20 ans mais qui comprennent rien à la POO...

ircmsg.find ? si en tant qu'utilisateur de ton bot, j'écris des trucs sur IRC, du genre "PING PRIVMSG QUERY NICK". Il se passe quoi à ton avis ? Tu devrais couper ta chaîne dès que tu la reçois, et une fois qu'elle est correctement splitée, vérifier que la commande correspond bien dans ton if.

Voilà, c'est tout pour le moment ^^

Enjoy

The lsd
Journalisée

Newbie Contest Staff :
The lsd - Th3_l5D (IRC)
Statut :
Administrateur
Citation :
Cartésien désabusé : je pense, donc je suis, mais je m'en fous !
S0410N3
Administrateur

Profil challenge

Classement : 10/54681

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 1260


Voir le profil WWW
« #2 le: 24 Avril 2018 à 19:36:03 »

Je connais des gens qui dev bien depuis 20 ans mais qui comprennent rien à la POO...

Présent o/
Journalisée

Enjoy (copyleft de quelqu'un qui a trop parlé)

S0410N3

-------------------------------------------------------------------------------------
La folie est le prix à payer pour le temps passé à être trop lucide.
-------------------------------------------------------------------------------------
http://forum.hardware.fr/hfr/Discussions/Societe/francais-repere-repaire-sujet_19265_1.htm
neibb

Profil challenge

Classement : 260/54681

Membre Junior
**
Hors ligne Hors ligne
Messages: 76


Voir le profil
« #3 le: 24 Avril 2018 à 19:52:34 »

Salut!
Merci pour les explications.

Alors en fait, ce bout de code ne correspond pas a mon programme, j'ai essayer de virer un peu ce qui nous interresse pas.
Du coup :
Citation
message[0] correspond à l'index 0 de la variable messge, soit le caractère "s". Ainsi, ça équivaut à "s" == "send", ce qui est par définition faux.

Tu ne valides donc jamais la condition et n'appelles pas la fonction send.

j'ai transforme messge en list grace a
Code:
messge = message.split()

Effectivement, je vais le rajouter dans mon post No1.
Toutes mes commandes sont passees sur ce principe.

Citation
Au passage, même en fixant ce souci, tu essaie désespérément d’utiliser la variable messge... qui n'existe pas, vu qu'il manque un "a"
Pas de soucis la decu, c'est bien ca j'ai deja pas mal de msg message etc...

Citation
Tu ne boucles pas, donc de base, ça ne devrait pas pouvoir fonctionner très longtemps (juste le temps des 2048 octets à recevoir, ou d'une coupure de la socket). Un coup de while True devrait aider à ce que ton bot survive
Je boucle grace a
Code:
joinchan(channel)
while rcvmsg() != exitcode :
rcvmsg()
Pardon, peut etre que j'ai voulu trop en virer dans mon premier message, je vais editer.
Par contre l'histoire des 2048 octets c'est quelque chose que je ne maitrise pas vraiment.
En plus au debut du code j'ai un
Code:
BUFFER_SIZE = 1024
Je veux bien quelques explications si ca ne te gene pas?

Du coup, pour en revenir a mon send(), lors de la declaration de ma fonction, est-ce que ca parait correct?
Est ce que DCC utilise un autre port qui pourrait etre filtre par ma box?

En tapant la commande manuellement dans HexChat :
Code:
/dcc send neib fichier
pas de probleme pour l'auto-envoie.

Par contre pour mon bot :
Code:
/dcc send BOT fichier
j'obtient le message suivant dans mon retour du programme :
Citation
/bin/sh: 1: DCC: not found
/bin/sh: 1: Syntax error: "(" unexpected
Je sais que je n'ai encore rien prevu pour la reception mais je trouve ce message un peu bizzard.

Ok, je vais editer mon premier message pour y comprendre un peu mieux.

Merci.
Journalisée

neibb.
the lsd
Administrateur

Profil challenge

Classement : 181/54681

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 3096

poulping for fun & profit


Voir le profil WWW
« #4 le: 24 Avril 2018 à 21:16:20 »

Évite de changer le code des messages précédents, sinon ceux qui vont arriver sur le topic après vont être perdus (bon, là ça va, t'as quasiment rien changé, donc ça passe )

Pour recv, c'est simple, tu donnes en argument la taille maximum que la fonction va recevoir. Donc, tu seras bloqué sur cette fonction tant que :

 - tu n'as pas reçu la taille maximum (2048 octets dans ton premier exemple)
 - ta connexion n'est pas interrompue (coupure physique par exemple)
 - tu ne reçois pas un paquet de type RST/FIN (qui termine la connexion)
 - tu ne reçois pas un paquet de type PSH (qui indique à la stack réseau d'envoyer tes données au programme). Pour ce point, je suis pas tout à fait sûr, mais ça me parait pas déconnant
 - j'oublie peut être des cas


Pour le DCC, attention, quand tu tapes "/DCC blablabla" dans hexchat, ça n'envoie pas "/DCC" au serveur, mais uniquement "DCC". Donc quand tu envoie DCC via le bot, ne mets pas le "/"
Par contre, il manque clairement un truc. Je ne vois pas comment tu peux passer de :

"ircsock.send(bytes("DCC SEND "+ adminname + " " + fichier +"\n", "UTF-8"))"

à :

"/bin/sh: 1: DCC: not found
/bin/sh: 1: Syntax error: "(" unexpected"

le /bin/sh correspond à rien dans l'histoire, je vois pas pourquoi tu as ça en fait ^^

Enjoy

The lsd
Journalisée

Newbie Contest Staff :
The lsd - Th3_l5D (IRC)
Statut :
Administrateur
Citation :
Cartésien désabusé : je pense, donc je suis, mais je m'en fous !
neibb

Profil challenge

Classement : 260/54681

Membre Junior
**
Hors ligne Hors ligne
Messages: 76


Voir le profil
« #5 le: 24 Avril 2018 à 21:56:25 »

Merci pour ces precisions, je vais etudier un peu ca.
Mais du coup dans :
 
Code:
def rcvmsg():
ircmsg = ircsock.recv(2048).decode("UTF-8")
ircmsg = ircmsg.strip('\n\r')

il faut bien que je lui indique la taille comme argument.
Pour moi la fonction se termine normalment a chaque message recu et 2048 est la taille maximum pour chaque message la communication.
Ce qui fait que globalment pas de probleme.

Citation
ircmsg.find ? si en tant qu'utilisateur de ton bot, j'écris des trucs sur IRC, du genre "PING PRIVMSG QUERY NICK". Il se passe quoi à ton avis ?  Tu devrais couper ta chaîne dès que tu la reçois, et une fois qu'elle est correctement splitée, vérifier que la commande correspond bien dans ton if.
En fait je trouve ca bien galere le traitement des messages recus. Ca marche a peu pres comme ca, je n'ai pas encore constate de problemes.
Mais du coup je vais le rajouter sur ma liste de modifications.

Sinon :
Citation
"/bin/sh: 1: DCC: not found
/bin/sh: 1: Syntax error: "(" unexpected"
ce message d'erreur a ete obtenu je pense grace a "print(message)" et en reponse a la commande manuelle dans mon client irc : "/dcc send monbot fichier" (ou en graphique via l'option adequat).
Peut etre est-ce du a une autre fonction ouverte en attente d'une commande et qui renvoie ce message d'erreur, mais tout le reste du programme semble fonctionner comme il faut.

Mais mon gros probleme est surtout le
Code:
def send(fichier) :
ircsock.send(bytes("DCC SEND "+ adminname + " " + fichier +"\n", "UTF-8"))
qui ne fonctionne pas.

Merci pour le coup d'oeil!

EDIT :  En fait j'ai compris pour l'histoire du "/bin/sh dcc not found". C'est du a mon "else :" de la fin qui accepte beaucoup trop de choses. Je vais y remedier.
Sinon pour mon "send()", si adminname a ete declare en dehors de la fonction, le connait-il a l'interieur? En meme temps oui, sinon j'aurais une erreur du genre "adminname not declared". J'ai plus trop d'idees... Bon, je vais continuer mes recherches.
« Dernière édition: 24 Avril 2018 à 22:49:59 par neibb » Journalisée

neibb.
Stockage
Administrateur

Profil challenge

Classement : 7/54681

Membre Complet
*****
Hors ligne Hors ligne
Messages: 178

"Tant qu'on ne choisit pas tout reste possible"


Voir le profil WWW
« #6 le: 25 Avril 2018 à 08:34:24 »

Code:
def rcvmsg():
ircmsg = ircsock.recv(2048).decode("UTF-8")
ircmsg = ircmsg.strip('\n\r')

Juste un détail mais qui a son importance : C'est "\r\n" et pas "\n\r" (un bon moyen mnémotechnique pour se rappeler de l'ordre, pense à la phrase "retour à la ligne" )
Journalisée

Newbie Contest Staff :
Stockage
Statut :
Administrateur
Citation :
Attendez, il s'est reincarné en tricycle !
neibb

Profil challenge

Classement : 260/54681

Membre Junior
**
Hors ligne Hors ligne
Messages: 76


Voir le profil
« #7 le: 26 Avril 2018 à 11:44:29 »

Salut Stockage.
Citation
Juste un détail mais qui a son importance : C'est "\r\n" et pas "\n\r"
En fait travaillant sur linux "\n" suffit. Mais je pensais au cote portage multi-plateforme. Enfin bref, du coup j'ai vire tous les "\r". Merci pour l'info!

Pour l'histoire de "DCC SEND".
J'ai essaye de simplifier mon code au maximum afin de ne garder que l'envoi de fichier, mais sans succes...

Code:
#!/usr/bin/python3
# -*- coding: utf-8 -*-

import socket
import os
import time

# Declaration des fonctions.
def pong():
  ircsock.send(bytes("PONG :pingis\n", "UTF-8"))

def sendfile():
ircsock.send(bytes("DCC SEND neib DCC.py" , "UTF-8"))

def rcvmsg():
ircmsg = ircsock.recv(2048).decode("UTF-8")
ircmsg = ircmsg.strip('\n')

if ircmsg.find ("PING :") != -1 :
pong()

elif ircmsg.find("PRIVMSG") != -1 :
name = ircmsg.split('!',1)[0][1:]
message = ircmsg.split('PRIVMSG',1)[1].split(':',1)[1]

if name == "neib" and message == "sendfile" :
sendfile()




# Parametrage de la connection.
# On determine le reseau sur lequel on va se connecter.
ircsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server = "chat.freenode.net" # Server
chan = "#TestDCCSEND" # Channel
botnick = "testdcc" # Nick

#
#
#
# Connection au reseau.
ircsock.connect((server, 6667)) # 6697 pour utiliser ssl ou sinon 6667.
ircsock.send(bytes("USER "+ botnick +" "+ botnick +" "+ botnick + " " + botnick + "\n", "UTF-8")) # Identification du bot.
ircsock.send(bytes("NICK "+ botnick +"\n", "UTF-8")) # Assigne le nick du bot

#
# Rejoindre un cannal.
ircsock.send(bytes("JOIN "+ chan +"\n", "UTF-8"))
ircmsg = ""
#ircsock.send(bytes("HELP\n", "UTF-8"))
ircsock.send(bytes("PRIVMSG "+ chan+ " :plop!\n", "UTF-8"))
ircsock.send(bytes("PRIVMSG neib :Ok.\n", "UTF-8"))

while 1 :
rcvmsg()

Etant donne que  DCC est un protocole utilise par IRC, ne faudrait-il pas creer une nouvelle connection entre le bot et l'admin sur un port specifique?

EDIT : De meme que :
Code:
def rcvfile():
ircsock.send(bytes("DCC GET neib", "UTF-8"))
ne semble pas fonctionner non plus. Il faudrait que j'arrive a trouver un message d'erreur...

Merci!
« Dernière édition: 26 Avril 2018 à 12:27:01 par neibb » Journalisée

neibb.
Stockage
Administrateur

Profil challenge

Classement : 7/54681

Membre Complet
*****
Hors ligne Hors ligne
Messages: 178

"Tant qu'on ne choisit pas tout reste possible"


Voir le profil WWW
« #8 le: 26 Avril 2018 à 15:09:30 »

En fait travaillant sur linux "\n" suffit. Mais je pensais au cote portage multi-plateforme. Enfin bref, du coup j'ai vire tous les "\r". Merci pour l'info!

Hum, ce que tu me dis me parait étrange tout de même. D'après la RFC, tous les messages du protocole sont censés se terminer par un CRLF :
Citation de: RFC 2812 - Internet Relay Chat: Client Protocol
IRC messages are always lines of characters terminated with a CR-LF
(Carriage Return - Line Feed) pair, and these messages SHALL NOT
exceed 512 characters in length, counting all characters including
the trailing CR-LF. Thus, there are 510 characters maximum allowed
for the command and its parameters.
source

Bon après, tant mieux si ça fonctionne très bien comme ça
Journalisée

Newbie Contest Staff :
Stockage
Statut :
Administrateur
Citation :
Attendez, il s'est reincarné en tricycle !
neibb

Profil challenge

Classement : 260/54681

Membre Junior
**
Hors ligne Hors ligne
Messages: 76


Voir le profil
« #9 le: 26 Avril 2018 à 15:29:47 »

Ah, je ne savais pas.
Etant autodidacte il y a pas mal de choses qui peuvent m'echaper.
Je m'etais arreter a l'utilisation "\n" --> linux, "\r" --> mac et "\r\n" --> windows.

Du coup j'ai teste avec et sans le "\r", les messages sont bien postes.
Par contre sans rien du tout (ni "r" ni "n") bon ba la ca marche plus du tout.

Du coup ca m'a fait voir que je l'avais oublie dans ma fonction sendfile(), mais ce n'est pas ca qui pose probleme apparement. 

Lors de l'appelle de ma fonction je fais un "print("n'importe quoi")" qui ne s'affiche pas, comme si le programme avait saute la suite car il continue de recevoir et analyser les messages que je lui envoie...

Code:
if name == "neib" and message == "sendfile" :
sendfile()
print("c'est bon")
Journalisée

neibb.
winw

Profil challenge

Classement : 122/54681

Néophyte
*
Hors ligne Hors ligne
Messages: 30


Voir le profil
« #10 le: 27 Avril 2018 à 00:48:07 »

Attention ! Le serveur irc ne connait pas la commande dcc, ça ne sert donc à rien de lui envoyer.
Le dcc c'est une connexion directe entre 2 clients irc instanciée via une requête ctcp (transitant via le serveur) ayant un format strict.
Ton client doit donc écouter sur un port, envoyer en ctcp les informations au destinataire pour se connecter (adresse ip/port/taille/etc.), attendre la connexion du client et lui envoyer les données.
Un peu de doc ne fait pas de mal : http://www.irchelp.org/protocol/ctcpspec.html
Journalisée
neibb

Profil challenge

Classement : 260/54681

Membre Junior
**
Hors ligne Hors ligne
Messages: 76


Voir le profil
« #11 le: 27 Avril 2018 à 01:47:20 »

Code:
Attention ! Le serveur irc ne connait pas la commande dcc, ça ne sert donc à rien de lui envoyer.
Alors c'est pour ca, que quand moi je la tape dans mon client, ca marche, et que mon Bot ne sait pas gerer ca car c'est lui le client et donc a lui de faire le boulot.

Ok il me semblait bien aussi que ca allait etre un truc comme ca. J'esperais encore que ca allait etre facile mais c'est la vie!

Du coup si je veux l'implementer il faut que je redefinisse une nouvelle connexion.
Je crois que cette fois j'ai bien saisi le probleme. Autrement dit, je ne suis pas sorti de l'auberge...
Je vais voir ce que je peux faire maintenant.

Merci pour les infos, ca me debloque vraiment!
Journalisée

neibb.
the lsd
Administrateur

Profil challenge

Classement : 181/54681

Membre Héroïque
*****
Hors ligne Hors ligne
Messages: 3096

poulping for fun & profit


Voir le profil WWW
« #12 le: 27 Avril 2018 à 10:48:32 »

Je m'etais arreter a l'utilisation "\n" --> linux, "\r" --> mac et "\r\n" --> windows.

C'est vrai sur le système en tant que tel (ou sur les applis). Effectivement, par défaut win va comprendre le \r\n et nux le \n. Mais là, on parle d'un protocole réseau qui ne suit par définition par les règles lié à un système d'exploitation. La RFC IRC définit que la fin d'une ligne est "\r\n", mais ça pourrait tout aussi bien fonctionner avec "the_lsd est le meilleur" ou "pixis est naze".
C'est un peu comme dire dans une voiture on met du sans plomb ou du diesel dans le réservoir, et que tu essaie de mettre ton sans plomb ou diesel dans le lave glace ^^

Enjoy

The lsd
Journalisée

Newbie Contest Staff :
The lsd - Th3_l5D (IRC)
Statut :
Administrateur
Citation :
Cartésien désabusé : je pense, donc je suis, mais je m'en fous !
neibb

Profil challenge

Classement : 260/54681

Membre Junior
**
Hors ligne Hors ligne
Messages: 76


Voir le profil
« #13 le: 29 Avril 2018 à 00:28:36 »

Merci pour toutes vos reponses qui m'ont permis d'y voir plus clair et apportent bien plus encore. Ca m'a permi d'aller voir des choses que je m'attendais pas et ca c'est cool! 

Sinon pour DCC je met de cote pour l'instant, ca m'a l'air trop complique pour le niveau ou j'en suis. Par contre je vois bien la direction a suivre, ce n'est que partie remise. J'ai quand meme la possibilite d'envoyer des fichiers par une fonction mail(), mais je me sens un peu limite quant a la taille des pieces jointes... Enfin bref, ca se fera petit a petit et ca sera bien quand meme!

Encore merci pour votre temps!
 
Je met un Resolu, je crois bien que toutes les explications ont ete donnes.
« Dernière édition: 29 Avril 2018 à 00:34:13 par neibb » Journalisée

neibb.
Pages: [1]
  Imprimer  
 
Aller à: