Bonjour,

Tout d'abord, désolé si ce n'est pas la bonne section, mais cela concerne php/batch/windows/pdo...Donc j'ai dû faire un choix que j'espère être le bon.

J'utilise wamp afin de faire tourner plusieurs sites, et, afin de satisfaire les besoin de ma guilde, j'ai créé un petit script qui met à jour leur profil automatiquement à partir des information d'un jeu en ligne.
J'avais donc automatiser l'exécution de ce script php et tout allait pour le mieux.
Le problème, c'est que pour une raison que j'ignore, le script ne s'exécute plus lorsque je le lance avec le bat créé à cet effet.
Le batch contient ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
@echo off
@echo ---------------------------------------------------------------------
@echo Maj des artisans en fonction du ladder
@echo ---------------------------------------------------------------------
@echo.
@echo.
D:\wamp\bin\php\php5.2.14\php.exe d:\wamp\apps\majladder\ladder.php >> d:\wamp\logs\majladder.log
@echo.
@echo.
et le script cela :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<?php

@set_time_limit(0);
$db_host = '127.0.0.1';
$db_name = 'nomdelabase';
$port = '3306';
$db_username = 'nomdelutilisateur';
$db_password = 'motdepasse';
$db_prefix = '';

// Connexion à la base de données
try
{
    $bdd = new PDO('mysql:host='.$db_host.';port='.$port.';dbname='.$db_name, $db_username, $db_password);
}
catch(Exception $e)
{
        echo 'Erreur : '.$e->getMessage().'<br />';
        echo 'N° : '.$e->getCode();
}

/***********************************************************************\
 Fonctions ladder
\***********************************************************************/

function getniveau($lvl)
{
    $xp = array(0,0,50,140,271,441,653,905,1199,1543,1911,2330,2792,3840,4439,5078,5762,6493,7280,8097,8980,9898,10875,11903,12985,14122,15315,16564,17873,19242,20672,22166,23726,25353,27048,28815,30656,32572,34566,36641,38800,41044,43378,45804,48325,50946,53669,56498,59437,62491,65664,68960,72385,75385,79640,83482,87475,91624,95937,100421,105082,109930,114971,120215,125215,131348,137256,143407,149811,156481,163429,170669,178214,186080,194283,202839,211765,221082,230808,240964,251574,262660,274248,286364,299037,312297,326175,340705,355924,371870,388582,406106,424486,443772,464016,485274,507604,531071,555741,581687);
    if ($lvl >= 581687)
    {
        return 100;
        break;
    }
    foreach($xp as $cle => $valeur)
    {
        if ($lvl < $valeur)
        {
            return $cle;
            break;
        }
    }
}

function getfromladder($name)
{
    $serveur = 17; // Hyrkul
    $data = array('na' => $name, 'hs' => $serveur);
    $context = stream_context_create(array(
        'http' => array(
            'method' => 'POST',
            'header' => "Content-type: application/x-www-form-urlencoded",
            'content' => http_build_query($data),
            'timeout' => 5
            )
        ));
    $persos = json_decode(@file_get_contents('http://www.dofus.com/requests/ladder_versus', false, $context));
    if ($persos == false)
    {
        return false;
        break;
    }
    foreach($persos as $perso)
    {
        $serveurId = $perso->hs; 
        if($serveurId == $serveur)
        {
            return $perso;
            break;
        }
    }
};

function convert($tab)
{
    $jobs = array('28'=>'paysan','25'=>'boulanger','2'=>'bucheron','24'=>'mineur','41'=>'chasseur','56'=>'boucher','36'=>'pecheur','58'=>'poissonnier','26'=>'alchimiste','65'=>'bricoleur','16'=>'bijoutier','63'=>'joaillomage','15'=>'cordonnier','62'=>'cordomage','27'=>'tailleur','64'=>'costumage','18'=>'sculpteur de batons','50'=>'sculptemage de baton','13'=>'sculpteur d'arc','48'=>'sculptemage d'arc','19'=>'sculpteur de baguettes','49'=>'sculptemage de baguettes','11'=>'forgeur d'epee','44'=>'forgemage d'&eacute;p&eacute;e','14'=>'forgeur de marteau','45'=>'forgemage de marteau','17'=>'forgeur de dague','43'=>'forgemage de dague','20'=>'forgeur de pelle','46'=>'forgemage de pelle','31'=>'forgeur de hache','47'=>'forgemage de hache','60'=>'forgeur de bouclier');
    $tableau = array();
    for ($i = 1; $i <=6; $i++)
    {
        $metier = $tab->{j.$i.i};
        $niveau = $tab->{j.$i.l};
        if (empty($jobs[$metier]))
        {
            break;
        }
        else
        {
            $tableau[$jobs[$metier]] = getniveau($niveau);
        }
    }
    return $tableau;
}

$today = date("d-m-Y H:i:s");
echo "Mise à jour des artisans à partir du ladder ($today) :\n";

// Mise à jour de la liste des artisans par le ladder
$requete = "SELECT sid,n_perso,metier,lvl_metier FROM ".$db->prefix."craft ";
$reponse = $bdd->query($requete);
while ($donnees = $reponse->fetch())
{
    $tab = convert(getfromladder($donnees['n_perso']));
    if (!empty($tab[$donnees['metier']]) AND $tab[$donnees['metier']] > $donnees['lvl_metier'] AND !empty($tab))
    {
        $req = $bdd->prepare("UPDATE ".$db->prefix."craft SET lvl_metier=:lvl_metier WHERE sid=:sid");
        $req->execute(array('lvl_metier' => $tab[$donnees['metier']],'sid' => $donnees['sid']));
        $req->closeCursor();
        echo "  -Mise à jour de ".$donnees['n_perso'].", ".$donnees['metier']." : ".$donnees['lvl_metier']." > ".$tab[$donnees['metier']]."\n";
    }
}
$reponse->closeCursor();
echo "\n";
?>
Lorsque je lance le batch, il me mets uniquement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Mise à jour des artisans à partir du ladder (26-09-2010 09:00:00) :
Alors que si j'exécute le même script via un navigateur web, j'obtiens :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Mise à jour des artisans à partir du ladder (26-09-2010 09:00:00) :
  -Mise à jour de zabidoche, tailleur : 98 > 100
J'avoue ne pas comprendre pourquoi.
Pourriez-vous m'éclairer ?