Pb avec balise system et wget

Résolu
ludovicanceaux Messages postés 440 Date d'inscription mardi 21 octobre 2003 Statut Membre Dernière intervention 6 mai 2010 - 9 déc. 2008 à 19:46
ludovicanceaux Messages postés 440 Date d'inscription mardi 21 octobre 2003 Statut Membre Dernière intervention 6 mai 2010 - 15 déc. 2008 à 00:08
Salut à tous,

Un site web mette leur fichier sql à disposition, j'aimerais bien la télécharger avec la balise system et easyPHP, seulement ca ne marche pas!!! je sais que c'est une balise linux, mais il n'y aurait pas un moyen de débloquer ca??

system("wget http://speed.travian.fr/map.sql -O tmp.sql");

Ca marche sur un serveur FTP, mais pas avec easyPHP, mais pourtant, c un programme en local que je développe ^^

Merci d'avance

11 réponses

kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
14 déc. 2008 à 22:33
Salut,

Il te manque l'enregistrement de la ligne 3956 :
INSERT INTO `x_world` VALUES (118157,9,253,1,144770,'06__pika=pourri(e);h',4568,'thibaultd',244,'CvC~LSDA',671);

Il y a un ";" dans le pseudo qui pose problème.
Le plus simple est, comme le dit juleSoft, de virer les ';' de fin de ligne :
(rassure toi, il y a bien un retour à la ligne à la fin de chaque INSERT, sauf que tu ne le vois pas toujours suivant le soft que tu utilises)

$read_file_sql = file_get_contents('http://speed.travian.fr/map.sql');

if ($read_file_sql){
    mysql_query("TRUNCATE TABLE `x_world`");
    $read_file_sql = rtrim($read_file_sql, ";");
    $split_bdd = explode(chr(10),$read_file_sql);   
   
    for ($i = 0;$i < count($split_bdd);$i++){
      $sql = $split_bdd[$i];      if (false $res mysql_query($split_bdd[$i])) die(mysql_error());
    }
   
} else {
  echo 'retrait du fichier impossible';
}

Cordialement,

Kohntark -
JulSoft Messages postés 354 Date d'inscription dimanche 3 juin 2001 Statut Membre Dernière intervention 11 mars 2013
11 déc. 2008 à 12:16
Tu as besoin de la commande wget sur ta machine où tourne easyPHP pour que ton appel à la fonction system puisse aboutir.

Tu devrais pouvoir trouver cette commande là: http://gnuwin32.sourceforge.net/packages/wget.htm
ludovicanceaux Messages postés 440 Date d'inscription mardi 21 octobre 2003 Statut Membre Dernière intervention 6 mai 2010
11 déc. 2008 à 13:47
Bah j'ai essayer de l'installer, mais je n'ai pas compris, ca ne marche toujours pas, enfin c pas grave, j'ai peut être fait un code + ds les cordes de PHP, mdr, mais je n'arrive pas à comprendre il manque 1 enregsitreùent à chaque fois!!!! quand je le met manuellement, j'ai exactement 76313 enregistrements, mais quand je passe par mon script, je n'ai que 76212 enregistrements, donc peut etre y a t'il une erreur!!
ludovicanceaux Messages postés 440 Date d'inscription mardi 21 octobre 2003 Statut Membre Dernière intervention 6 mai 2010
11 déc. 2008 à 13:49
Enfin, je n'ai pas tellement compris comment ca marche, en +, toutes les docs sont en anglais, lollll!!!!!!

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
JulSoft Messages postés 354 Date d'inscription dimanche 3 juin 2001 Statut Membre Dernière intervention 11 mars 2013
11 déc. 2008 à 18:51
Si tu as un problème du nombre d'enregistrements dans ta base de données, c'est du coté de mySQL qu'il faut chercher.

system("wget http://speed.travian.fr/map.sql -O tmp.sql") ne fait que télécharger un fichier sql qui contient les commandes nécessaires à la création de tes enregistrements, ce qu'il fait aparemment bien vu que tu peux utiliser ledit fichier ;-)
ludovicanceaux Messages postés 440 Date d'inscription mardi 21 octobre 2003 Statut Membre Dernière intervention 6 mai 2010
11 déc. 2008 à 21:37
ah oui mdr!!!!, c vrai ke je n'ai pas dis la suite de mon code, je voulais utiliser un truc du style après le wget:
system('mysql --host='.$mysqlhost.' --user='.$mysqluser.' --password='.$mysqlpass.' --default-character-set=utf8 '.$mysqldb.' < data/tmp.sql');

Mais apparament, cela n'est pas possible, mdr!!!! à cause de la balise linux, lollll, donc je me suis orienté vers un code + php-mysql, mais j'ai toujours un décalage d'1 enregistrement :(

Du coup le code actuel que j'utilise c'est :
<?php set_time_limit(0); 

$mysqlhost = 'localhost';
$mysqluser = 'root';
$mysqlpass = '';
$mysqldb = 'travian';
$db = @mysql_connect($mysqlhost, $mysqluser, $mysqlpass) OR die('Can not connect to DB-Server!');
$db_select = @mysql_select_db($mysqldb) OR die('Can not select DB!');

$read_file_sql=file_get_contents('http://speed.travian.fr/map.sql');
if($read_file_sql){
    mysql_query("TRUNCATE TABLE `x_world`");
    $split_bdd=explode(';',$read_file_sql);
    for($i=0;$i<count($split_bdd);$i++){
        mysql_query($split_bdd[$i]);
    }
    echo $split_bdd[0];
}else{?>
    Le serveur n'a pas pu se mettre à jour!!!
<?php }?>
JulSoft Messages postés 354 Date d'inscription dimanche 3 juin 2001 Statut Membre Dernière intervention 11 mars 2013
11 déc. 2008 à 21:54
étrange... Essaye de "découper" ton fichier avec "\n" comme séparateur au lieu de ";", peut être que... sinon je sèche...
ludovicanceaux Messages postés 440 Date d'inscription mardi 21 octobre 2003 Statut Membre Dernière intervention 6 mai 2010
11 déc. 2008 à 22:18
oui bizarre, tu m'étonnes, c un truc de fou ca fait depuis hier que je cherche, lollllllll, mais je n'ai pas testé ta solution, je vais testé, ;-)
ludovicanceaux Messages postés 440 Date d'inscription mardi 21 octobre 2003 Statut Membre Dernière intervention 6 mai 2010
11 déc. 2008 à 22:24
bah tu sais quoi?? il n'y a pas de retour à la ligne ds mon fichier, mdr!!!!! j'essaye de faire un comparatif entre les 2 tables pour voir quel ligne il a zappé, mais c pas facile, mdr
JulSoft Messages postés 354 Date d'inscription dimanche 3 juin 2001 Statut Membre Dernière intervention 11 mars 2013
11 déc. 2008 à 23:23
alors perso, sous linux, le fichier que tu telecharges contient 76313 lignes, terminées par un \n (pas détecté comme une fin de ligne sous windows par les programmes "classiques", qui eux recherchent la combinaison \r\n sauf erreur (ca remonte un peu pour moi cette époque...).

julien@tikehau ~/dev/tmp $ wc tmp.sql
76313 459008 7877398 tmp.sql

sachant que wc retourne, dans l ordre: le monbre de lignes, le nombre de mots, le nombre de bytes et le nom du fichier qu il a traité.
ludovicanceaux Messages postés 440 Date d'inscription mardi 21 octobre 2003 Statut Membre Dernière intervention 6 mai 2010
15 déc. 2008 à 00:08
wouaaaaaa t'es trop fort!!!!! pas facile de chercher la source d'erreur ds 76313 lignes, mdr!!!!!! je comprends pas tout ton code, mais ca marche!!!!!
Rejoignez-nous