Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1537 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Problème d'adaptation de script. (Résolu mais voir fin)

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème d'adaptation de script. (Résolu mais voir fin)

n°485575
Master_Jul
Posté le 12-08-2003 à 23:09:48  profilanswer
 

Bonjour, je suis confronté à un problème embêtant et assez urgent, un ami a réalisé un script qui permet d uploader des fichier sur un site tout en remplissant une base de donnée, le script ci dessous, permet de gérer des fichiers de la forme :
 
classique : map_temps_pseudo_pays.zip
carte particulière CPM : map_cpm_temps_pseudo_pays.zip
temps supérieure à 1 minute : map_1minXX.XXX_pseudo_pays.zip
 
Tout marchait pour le mieux jusqu'à ce qu'une nouvelle version du jeu sorte et chamboulle la syntaxe qui devient :
 
map[df.type]xx.xx.xxx(pseudo.pays).dm_68
 
Ca perturbe encore plus le script d'origine qui reconnait les cartes de type CPM à leur nom qui est tout simplement xxx_cpm.
 
Je ne m'y connais pas trop en explode et compagnie, pourriez vous m'aiguiller svp ? L'enjeu est important des centaines de démos doivent être envoyées chaque jour et nous sommes bloqués car mon ami n'est pas en mesure de nous aider.
 
 :hello:  
 

Code :
  1. function writeFile($new) {
  2.   $total = file("newdemos.php" );
  3.   $f = fopen("newdemos.php","rw" );
  4.   $demos = split(";",$total[1]);
  5.   fwrite($f,$new." ; ".$total[1]." ; ".$total[2]." ; ".$total[3]." ; ".$total[4]);
  6.   fclose($f);
  7. }
  8.   include("../connect.php3" );
  9.   $tab = split("_",$Fichier_name);
  10.   $taille = count($tab);
  11.   $ext = split("\.",$tab[$taille-1]);
  12.   $tmp = split("min",$tab[$taille-3]);
  13.   if(count($tmp) == 1) {
  14.     $temps = doubleval($tab[$taille-3]);
  15.   } else {
  16.     $temps = doubleval($tmp[1])+doubleval($tmp[0])*60;
  17.     $temps = doubleval($temps);
  18.   }
  19.   if(strcmp($ext[1],"zip" ) == 0) {
  20.     if($temps != 0) {
  21.       if ($Fichier && $Fichier != "none" ) {
  22. if(!file_exists($Fichier_name)) {
  23.   if($email != "" ) {
  24.     $aut = 1;
  25.           } else {
  26.             echo "Vous n'avez pas rentrer d'e-mail";
  27.           }
  28.         } else {
  29.    echo "Cette Demo a déja été uploadée !!!<br>";
  30.    $ok = 0;
  31. }
  32.       }
  33.     } else {
  34.       echo "Format non valide : le fichier doit être comme ceci carte_temps_pseudo(sans _)_pays.zip<br>";
  35.       $ok = 0;
  36.     }
  37.   } else {
  38.     echo "Demo non-zippée<br>";
  39.     $ok = 0;
  40.   }
  41.   $pays = $ext[0];
  42.   $pseudo = $tab[$taille-2];
  43.   $map = $tab[0];
  44.   for($i = 1; $i <= ($taille-4) ; $i++) {
  45.     $map = $map."_".$tab[$i];
  46.   }


Message édité par Master_Jul le 18-08-2003 à 10:18:07

---------------
En français, on écrit "connexion", pas "connection".
mood
Publicité
Posté le 12-08-2003 à 23:09:48  profilanswer
 

n°485576
schnapsman​n
Zaford Beeblefect
Posté le 12-08-2003 à 23:11:23  profilanswer
 

c'est pour ton taf?
 
si oui, tu rémunères combien pour ce travail qui -je le rapelle- mérite salaire?


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°485580
Master_Jul
Posté le 12-08-2003 à 23:15:18  profilanswer
 

SchnapsMann a écrit :

c'est pour ton taf?
 
si oui, tu rémunères combien pour ce travail qui -je le rapelle- mérite salaire?


 
c'est qu'un site bénévole www.defrag-france.net comme tu le vois, trône un PayPal pour les dons à droite qui sont inexistants, et je paie déjà l'hebergement entièrement à mes frais :/
 
c'est sûr que si je cherche je dois bien trouver mais j'ai quelques problèmes de temps là, exemple d'un travail à moi, censé être rénuméré :
 
http://forum.hardware.fr/forum2.ph [...] h=&subcat=
 
Je demande pas qu'on me le fasse, je demande un peu d'aide, spa l'ANPE ce forum :/
 
A+


---------------
En français, on écrit "connexion", pas "connection".
n°486962
Master_Jul
Posté le 14-08-2003 à 11:25:29  profilanswer
 

:bounce:


---------------
En français, on écrit "connexion", pas "connection".
n°486977
urd-sama
waste of space
Posté le 14-08-2003 à 11:35:34  profilanswer
 

il faut que tu utilises les expressions régulières, et donc changer le début de ton code.
si ca peut déjà un peu t'aider

n°486988
anapajari
s/travail/glanding on hfr/gs;
Posté le 14-08-2003 à 11:40:16  profilanswer
 

bin comme tu l'as si bien expliqué le probleme c'est que le nom de ton fichier a completement changer de structure et donc que les tests qu'effectuaient ton scripts doivent choucrouter maintenant.
 
En même temps à mon avis il te suffit de virer le control sur l'extension:

Code :
  1. if(strcmp($ext[1],"zip" ) == 0)


Et il devrait marchouiller, ce qui te laissera le temps de le peaufiner ensuite...

n°486990
Master_Jul
Posté le 14-08-2003 à 11:41:00  profilanswer
 

Urd-sama a écrit :

il faut que tu utilises les expressions régulières, et donc changer le début de ton code.
si ca peut déjà un peu t'aider


 
ok merci, je suis sur la fonction ereg() je regarde :jap:


---------------
En français, on écrit "connexion", pas "connection".
n°487035
karamilo
Posté le 14-08-2003 à 11:57:09  profilanswer
 

preferes preg, bcp plus rapide et plus puissant !

n°487075
Master_Jul
Posté le 14-08-2003 à 12:48:32  profilanswer
 

karamilo a écrit :

preferes preg, bcp plus rapide et plus puissant !


 
je regarde mais je comprend pas tout de l'exemple
 
Eclatement d'une chaîne de recherche  
 

Code :
  1. <?php
  2. // scinde la phrase grâce aux virgules et espacements
  3. // ce qui inclus les " ", \r, \t, \n et \f
  4. $keywords = preg_split ("/[\s,]+/", "langage hypertexte, programmation" );
  5. ?>


 
"/[\s,]+/" Je comprend pas ce que ça contient en fait, dans mon cas, puis je faire ca ? :
 

Code :
  1. $record1 = preg_split ("[.]..(.).", "map[df.type]xx.xx.xxx(pseudo.pays).dm_68" );


 
où il faut juste spécifier "[].()" ?


Message édité par Master_Jul le 14-08-2003 à 12:49:02

---------------
En français, on écrit "connexion", pas "connection".
n°487084
Master_Jul
Posté le 14-08-2003 à 12:58:38  profilanswer
 

ou avec split ?
 
<?php
$record = "map[df.type]xx.xx.xxx(pseudo.pays).dm_68";  
// Les délimiteurs peuvent être des tirets, points ou slash
list ($month, $day, $year) = split ('[.]()]', $record);
?>
 
 
ou explode ?
 
non on dirait que je ne peux pas car il ne permet pas d'utiliser plusieurs séparateurs


---------------
En français, on écrit "connexion", pas "connection".
mood
Publicité
Posté le 14-08-2003 à 12:58:38  profilanswer
 

n°487085
karamilo
Posté le 14-08-2003 à 13:02:53  profilanswer
 

il faut échapper [, ) et . car ce sont des caracteres speciaux de la regex
il faut aussi délimiter ta regexp preg avec deux caracteres identiques genre #taregexp#specials
 
edit: \s est une classe de caractere et signifie tous les caracteres blancs ( tabulation, saut de ligne, espace ... )


Message édité par karamilo le 14-08-2003 à 13:04:31
n°487102
Master_Jul
Posté le 14-08-2003 à 13:31:16  profilanswer
 

Ca pourrait donner ça ?
 
Si je prend soin d'échappper [, ) et .
 
$record = "map[df.type]xx.xx.xxx(pseudo.pays).dm_68";
$keywords = preg_split ("/[\[\]\.\(\)]+/", $record);
 
Où il faut que je fasse plusieurs "module" [...] ?
 
Je ne comprend pas très bien la syntaxe "/[...]+/"  
 
A quoi sert le + ici ?
 
 
Je n'ai pas compris : "il faut aussi délimiter ta regexp preg avec deux caracteres identiques genre #taregexp#specials ".
 
Merci beaucoup pour ton aide :jap:  :hello:


---------------
En français, on écrit "connexion", pas "connection".
n°487120
karamilo
Posté le 14-08-2003 à 13:51:54  profilanswer
 

pas de probleme
 
dans une regex de type preg, il y a deux parties, l'expression et les options. La 1ere est delimitée au début et à la fin par un même caracteur ( qui doit pas etre alphanum ou antislash ).  
si le delimiteur est utilisee ds l'expression, il doit etre echappe ( antislash ).  
ca donne :
#expression#options
/expression/options
....
 
Les options :
i - recherche insensible à la casse.
m - recherche mutlilignes si l'expression est amenée à travailler sur des chaînes comportant des \n.
F - dans preg_replace permet d'appeler une fonction PHP pour fournir le caractère de remplacement (PHP 4.0.4).
A - "ancre" le masque, le motif recherché doit correspondre du début à la fin à l'expression régulière.
S - permet d'optimiser l'expression régulière si elle est appelée plusieurs fois, par exemple lors d?un traitement récursif ou en boucle.
s - le méta caractère point (.) prend toutes les valeurs, y compris le saut de ligne.
U - Limite la gourmandise de toute l?expression rationelle.
 
Ce qui est entre crochets [] est une classe de caractere et ce qui est entre paranthèses () est un sous motif, utile par exemple pour les references arrieres.
 
ta regex est pas mal, reste a tester ;)  
[...]+ veut dire qu'il faut un ou plus caractères qu'il y a entre []
par ex : [a1]+ = au moins un "a" ou un "1"  
au contraire, * a la place de + => 0 ou plus de caracteres
et ? => 0 ou un seul caractere
 
tu peux definir le nombre precis avec {nbdebut,nbfin} qui represente l'intervalle possible :
a{2,4} => il faut entre 2 et 4 "a"


Message édité par karamilo le 14-08-2003 à 13:54:44
n°487123
Master_Jul
Posté le 14-08-2003 à 13:57:01  profilanswer
 

Ca a l'air de marcher karamilo ! Merci beaucoup ! :hello:  
 
<?php
 
$record = "map[df.type]xx.xx.xxx(pseudo.pays).dm_68";  
$keywords = preg_split ("/[\[\]\.\(\)]+/", $record);  
 
print_r($keywords);
 
?>
 
Array ( [0] => map [1] => df [2] => type [3] => xx [4] => xx [5] => xxx [6] => pseudo [7] => pays [8] => dm_68 )


---------------
En français, on écrit "connexion", pas "connection".
n°487145
karamilo
Posté le 14-08-2003 à 14:11:21  profilanswer
 

impec :) :hello:

n°487177
Master_Jul
Posté le 14-08-2003 à 14:26:05  profilanswer
 


 
puis-je te demander un dernier service s'il te plait, le script répond presque à mes attentes, j'ai fais ceci qui me comble :
 
$record = "flow[df.cpm]00.16.584(-MdC-AhfeeL.Reunion).dm_68";  
$keywords = preg_split ("/[\[\]\.\(\)]+/", $record);  
$temps = "$keywords[3].$keywords[4].$keywords[5]";
 
// print_r($keywords);
//echo '<br>';
// echo '<br>';
echo "Le script traite le record suivant : $record.";
echo '<br>';
echo "La map choisie est $keywords[0].";
 
Seul soucis, les joueurs ne doivent pas avoir un pseudo contenant . [] et () ce qui risque de poser soucis, penses tu qu'il y aurait un moyen de palier ce petit défaut ?  
 
Merci d'avance.


---------------
En français, on écrit "connexion", pas "connection".
n°487439
karamilo
Posté le 14-08-2003 à 16:13:58  profilanswer
 

me revoila
 
le mieux ici est carrément de faire un preg_replace, sinon, ca serait "dangereux" de spliter le pseudo lui meme avec des [ ] ...  
 
d'ou :
 

Code :
  1. $record = "flow[df.cpm]00.16.584(-MdC-Ahf[])')())eeL.Reunion).dm_68"; 
  2. $map = preg_replace("#^(.*?)\[df\.(.*?)\]([0-9]{2})\.([0-9]{2})\.([0-9]{3})\((.*?)\.(.*?)\)\.dm_68$#","$1 $2 $3 $4 $5 $6 $7",$record);
  3. $map = explode(" ",$map);

 
 
ca cherche le motif type puis mets le contenu changeant sous forme : var1 var2 var3
puis un simple explode des espaces et tu retrouves $map[0] == var1 ...  
 
voila le resultat :
http://213.245.121.150/~karamilo/ti.php
 
les chiffres a la fin, c'est le tps d'execution pour voir si c'est potable ou pas. Ici, on a du 0.2 ms a peu pres, ce qui est impec :)
 
ps: j'avais vu ton programme pour les lans et ton site, bravo :jap:

n°487542
Master_Jul
Posté le 14-08-2003 à 17:49:58  profilanswer
 

J'ai un petit problème, même en recopiant ton code je n'obtient rien dans l'echo.  :??:  
 

Code :
  1. $record1 = "flow[df.cpm]00.16.584(-MdC-Ahf[])')())eeL.Reunion).dm_68"; 
  2.  
  3.   $map = preg_replace("#^(.*?)\[df\.(.*?)\]([0-9]{2})\.([0-9]{2})\.([0-9]{3})\((.*?)\.(.*?)\)\.dm_68$#","$1 $2 $3 $4 $5 $6 $7",$record1);
  4.   $map = explode(" ",$map);
  5.  
  6.   echo "$map[0]";


 
Merci pour le script et le site  :) Dommage que ça ce soit mal terminé :( .


---------------
En français, on écrit "connexion", pas "connection".
n°487543
karamilo
Posté le 14-08-2003 à 17:55:05  profilanswer
 

bizarre ca, regarde le lien du dessus, j'ai c/c et uploade la page.
tu as essayé sur une page de test?

n°487547
Master_Jul
Posté le 14-08-2003 à 18:10:21  profilanswer
 

C'est de ma faute désolé, ça a l'air de marcher, j'avais eu un décalage à cause du df qui n'est plus considéré comme une variable, il me faudrait par contre l'extension comme une variable $8, j essai de comprendre la syntaxe


---------------
En français, on écrit "connexion", pas "connection".
n°487559
Master_Jul
Posté le 14-08-2003 à 18:35:19  profilanswer
 

ok tout est bon, encore merci !  :jap:  :jap:  :jap:  :hello:


---------------
En français, on écrit "connexion", pas "connection".
n°487577
karamilo
Posté le 14-08-2003 à 18:48:33  profilanswer
 

pas de probleme :)  
si tu as un autre probleme, hesites pas

n°488139
Master_Jul
Posté le 15-08-2003 à 16:16:28  profilanswer
 

de retour, j'ai un petit soucis pas trop grave, un joueur utilisait le pseudo Mdc.Scam, le point induit en erreur le script avec ce masque :
 
"#^(.*?)\[df\.(.*?)\]([0-9]{2})\.([0-9]{2})\.([0-9]{3})\((.*?)\.(.*?)\)\.(.*?)#"
 
Dans ton exemple tu n'avais pas mis de point, c'est peut être pour ça que tu n'as pas vu que ça posait problème.


---------------
En français, on écrit "connexion", pas "connection".
n°488144
Master_Jul
Posté le 15-08-2003 à 16:18:10  profilanswer
 

si on vire le . de la paranthèse du pays ça marche  ? (?*) c'est bon ?  [:meganne]
 
edit : non ça marche pas


Message édité par Master_Jul le 15-08-2003 à 16:28:29

---------------
En français, on écrit "connexion", pas "connection".
n°490004
Master_Jul
Posté le 18-08-2003 à 10:17:35  profilanswer
 

:bounce:


---------------
En français, on écrit "connexion", pas "connection".
n°490064
karamilo
Posté le 18-08-2003 à 10:50:33  profilanswer
 

Master_Jul a écrit :

J'ai un petit problème, même en recopiant ton code je n'obtient rien dans l'echo.  :??:  
 

Code :
  1. $record1 = "flow[df.cpm]00.16.584(-MdC-Ahf[])')())eeL.Reunion).dm_68"; 
  2.  
  3.   $map = preg_replace("#^(.*?)\[df\.(.*?)\]([0-9]{2})\.([0-9]{2})\.([0-9]{3})\((.+)\.(.+)\)\.dm_68$#","$1 $2 $3 $4 $5 $6 $7",$record1);
  4.   $map = explode(" ",$map);
  5.  
  6.   echo "$map[0]";


 
Merci pour le script et le site  :) Dommage que ça ce soit mal terminé :( .


 
 
juste

n°490113
Master_Jul
Posté le 18-08-2003 à 11:37:45  profilanswer
 


 
hello, tu peux me confirmer que mon problème de "." n'est pas résolvable ?


---------------
En français, on écrit "connexion", pas "connection".
n°490130
karamilo
Posté le 18-08-2003 à 11:55:36  profilanswer
 

si, regarde le code juste au dessus, c'est modifié
 
avec le ? a la fin, ca va chercher au plus court possible. Au contraire, sans ?, le plus long possible.  
ca sert aussi lors d'imbrications par exemple.


Message édité par karamilo le 18-08-2003 à 11:57:01
n°490179
Master_Jul
Posté le 18-08-2003 à 13:07:19  profilanswer
 

karamilo a écrit :

si, regarde le code juste au dessus, c'est modifié
 
avec le ? a la fin, ca va chercher au plus court possible. Au contraire, sans ?, le plus long possible.  
ca sert aussi lors d'imbrications par exemple.


 
merci  :love:  :jap: mais où as tu appris tout ça ?


---------------
En français, on écrit "connexion", pas "connection".
n°490180
karamilo
Posté le 18-08-2003 à 13:08:27  profilanswer
 

sur le web

n°490185
Master_Jul
Posté le 18-08-2003 à 13:11:38  profilanswer
 


 
moi aussi mais je n'ai pas poussé à ce point, peut être que si j'avais recherché un peu :whistle: enfin c'est ce que j'ai fait mais j'avais vraiment du mal avec ces pattern, encore merci :jap:


---------------
En français, on écrit "connexion", pas "connection".
n°490186
karamilo
Posté le 18-08-2003 à 13:12:14  profilanswer
 

pas de probleme ;)

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Problème d'adaptation de script. (Résolu mais voir fin)

 

Sujets relatifs
[Perl CGI] Problème d'affichageproblème de création de table
[PHP, MYSQL] [résolu]Comment optimiser ce code? (nombreux SELECT FROM)probleme de non respect des couleurs sous ie6.0
bon g fê un script mais il ne fnction pas sur le servr où est l'ereur?[linux] empêcher un programme de se lancer plusieurs fois : résolu
Petit probleme avec le "DOS" de la console de recup XPproblème bizarre avec les headers
Système de couleurs personalisées avec JS compatible Mozilla [résolu]Problème de conversion de format de date....
Plus de sujets relatifs à : Problème d'adaptation de script. (Résolu mais voir fin)


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR