Pb avec balise system et wget [Résolu]

Signaler
Messages postés
440
Date d'inscription
mardi 21 octobre 2003
Statut
Membre
Dernière intervention
6 mai 2010
-
Messages postés
440
Date d'inscription
mardi 21 octobre 2003
Statut
Membre
Dernière intervention
6 mai 2010
-
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

Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
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 -
Messages postés
354
Date d'inscription
dimanche 3 juin 2001
Statut
Membre
Dernière intervention
11 mars 2013

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
Messages postés
440
Date d'inscription
mardi 21 octobre 2003
Statut
Membre
Dernière intervention
6 mai 2010
1
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!!
Messages postés
440
Date d'inscription
mardi 21 octobre 2003
Statut
Membre
Dernière intervention
6 mai 2010
1
Enfin, je n'ai pas tellement compris comment ca marche, en +, toutes les docs sont en anglais, lollll!!!!!!
Messages postés
354
Date d'inscription
dimanche 3 juin 2001
Statut
Membre
Dernière intervention
11 mars 2013

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 ;-)
Messages postés
440
Date d'inscription
mardi 21 octobre 2003
Statut
Membre
Dernière intervention
6 mai 2010
1
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 }?>
Messages postés
354
Date d'inscription
dimanche 3 juin 2001
Statut
Membre
Dernière intervention
11 mars 2013

étrange... Essaye de "découper" ton fichier avec "\n" comme séparateur au lieu de ";", peut être que... sinon je sèche...
Messages postés
440
Date d'inscription
mardi 21 octobre 2003
Statut
Membre
Dernière intervention
6 mai 2010
1
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é, ;-)
Messages postés
440
Date d'inscription
mardi 21 octobre 2003
Statut
Membre
Dernière intervention
6 mai 2010
1
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
Messages postés
354
Date d'inscription
dimanche 3 juin 2001
Statut
Membre
Dernière intervention
11 mars 2013

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é.
Messages postés
440
Date d'inscription
mardi 21 octobre 2003
Statut
Membre
Dernière intervention
6 mai 2010
1
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!!!!!