bonjour,

j'ai une application en php qui donne un resultat
cela fonctionne très bien quand je lance qu'une application à la fois.
Alors que quand j'en lance plusieurs il me donne toujours le même resultat.
je pense que le problème vient d'une variable appelé $IDSession.
Je vous met le code pour que vous compreniez mieux.

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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
$numCalcul=$_SESSION['lancerMax']-$_SESSION['lancer']+1;
 
	$_SESSION['num']=$numCalcul;
	$max=$_SESSION['lancerMax'];
 
 
	//les id des objectifs choisis sont dans l'ordre dans chargementObjectifs
 
	$chargementObjectifs=unserialize($_SESSION['chargements']);
 
	$nbChargements=count($chargementObjectifs);
 
	//on récupère ce que l'on sait de la pièce dont on attend les résultats
	$pieceCalculee=unserialize($_SESSION["pieceCalculee{$numCalcul}"]);
 
	$IDSession=session_id();
 
	//connexion à la base
		connexion();
 
	//on attend les résultats de tous les jobs concernant les paramètres d'entrées de la pièce en question et on les traite
 
	// pour les chargements
	for ($i=0;$i<$nbChargements;$i++)
	{
 
		$k=$i+1;
		$job="/home/web/calcul/PREDIM/tempDonnees/$IDSession/job_{$numCalcul}_o{$k}_".session_id()."_sge.sh";
		while(file_exists($job))
		{
			usleep(100000000);
		}
 
		//il faudra faire des if pour savoir ce que je dois lancer (ideas ou pas,matlab ou scilab, ...)
		//il faut d'abord que je copie les scripts et autres fichiers dans le temporaire/idsession
		$chargement=$chargementObjectifs[$i];
		$_SESSION['char']=$chargement;
		system ("cp /home/web/calcul/PREDIM/donnees/famille{$IDFamille}/chargements/{$chargement}.py /home/web/calcul/PREDIM/tempDonnees/$IDSession/");
		system ("cp /home/web/calcul/PREDIM/donnees/famille{$IDFamille}/chargements/*.gnu /home/web/calcul/PREDIM/tempDonnees/$IDSession/");
		$job="job_{$numCalcul}_o{$k}_".session_id().".odb";
		system('ksh;. /home/apptest/abaqus/bin/abaenv;. /home/sgeadmin/profile;PATH={$PATH}:/usr/ucb:/usr/apltest/abaqus/Commands;export PATH;cd /home/web/calcul/PREDIM/tempDonnees/'."$IDSession; abq645 python $chargement.py $job");
 
		if (file_exists("/home/web/calcul/PREDIM/donnees/famille{$IDFamille}/chargements/$chargement.m"))
			{
				system ("cp /home/web/calcul/PREDIM/donnees/famille{$IDFamille}/chargements/$chargement.m /home/web/calcul/PREDIM/tempDonnees/$IDSession/");
				system ("cp /home/web/calcul/PREDIM/donnees/famille{$IDFamille}/chargements/*.m /home/web/calcul/PREDIM/tempDonnees/$IDSession/");
 
				system("rsh rbu010 . /home/web/calcul/PREDIM/lancement_matlab.sh $IDSession $chargement.m");
 
			}
			system("rsh rbu010 . /home/web/calcul/PREDIM/lancement_gnuplot.sh $IDSession tracer.gnu");
 
	//je me retrouve avec les résultats dans retour_resultats.txt et peut-etre une image
 
	//	là, j'ai des résultats dans rf.txt et je dois lancer matlab
	//	je copie mon fichier matlab et tous les autres fichiers .m correspondant à son exécution
	//  j'ai mes résultats dans retour_resultats.txt
	//	j'ouvre le fichier
 
		if (!file_exists("/home/web/calcul/PREDIM/tempDonnees/$IDSession/retour_resultats.txt"))
		{
			// si le fichier n'existe pas c'est qu'il y a eu annulation par l'admin
			echo "<div class='alerte'> Vos calculs ont été annulés </div>";
		}
		else
		{
		$resultat=fopen("/home/web/calcul/PREDIM/tempDonnees/$IDSession/retour_resultats.txt", "r");
		$ligne=floatval(fgets($resultat));
		//$pieceCalculee s'ajoute dans $ligne
		$pieceCalculee->addChargement($ligne);
		$ligne=floatval(fgets($resultat));
		$pieceCalculee->addChargement($ligne);
		$ligne=floatval(fgets($resultat));
		$pieceCalculee->addChargement($ligne);
		$tempExtra=array();
		$requete="SELECT fk_id_Extraction FROM RELFAMCHARGEMENT WHERE fk_id_Famille=$IDFamille AND fk_id_Chargement=$chargement ORDER BY ordre";
		//on exécute la requète
		$resultatSql=mysql_query($requete);
		echo mysql_error();
		//retourne le nombre de ligne du résultat de la requète
		$nbExtractions=mysql_num_rows($resultatSql);
		if ($nbExtractions==1)
		{
			$ligne=mysql_fetch_row($resultatSql);
			if ($ligne[0]!=0)
			{
				$ligne=floatval(fgets($resultat));
				$tempExtra[]=$ligne;	
			}
		}
		else
		{
			for ($i=0;$i<$nbExtractions;$i++)
			{
				$ligne=floatval(fgets($resultat));
				$tempExtra[]=$ligne;
			}
		}
		//on ajoute la pièce calculée dans le chargement avec comme paramètre le temps
		$pieceCalculee->addChargement($tempExtra);
 
		if (file_exists("/home/web/calcul/PREDIM/tempDonnees/$IDSession/retour_image_scilab.gif"))
		{
			system ("cp /home/web/calcul/PREDIM/tempDonnees/$IDSession/retour_image_scilab.gif  /home/web/calcul/PREDIM/tempDonnees/$IDSession/$numCalcul.gif");
		}
 
 
		if (file_exists("/home/web/calcul/PREDIM/tempDonnees/$IDSession/retour_image_matlab.gif"))
		{
			system ("cp /home/web/calcul/PREDIM/tempDonnees/$IDSession/retour_image_matlab.gif  /home/web/calcul/PREDIM/tempDonnees/$IDSession/$numCalcul.gif");
		}
 
		//creation du repertoire recupérant les resultats et les courbes au fur et à mesure
		system("mkdir -m 777 /home/web/calcul/PREDIM/donnees/resultats_calculs/");
		system("mkdir -m 777 /home/web/calcul/PREDIM/donnees/resultats_calculs/$IDSession");
 
		// copie de la courbe obtenue pour le dernier calcul effectué si le fichier existe
		if (file_exists("/home/web/calcul/PREDIM/tempDonnees/$IDSession/tracer.png"))
		{
			copy("/home/web/calcul/PREDIM/tempDonnees/$IDSession/tracer.png","/home/web/calcul/PREDIM/donnees/resultats_calculs/$IDSession/tracer.png");
		}
		system ("cp /home/web/calcul/PREDIM/tempDonnees/$IDSession/retour_resultats.txt  /home/web/calcul/PREDIM/tempDonnees/$IDSession/$numCalcul.txt");
	}
 
 
	$p="pieceCalculee".$numCalcul;
	$_SESSION["{$p}"]=serialize($pieceCalculee);
	//ici, je dois enregistrer la pieceCalculee dans la base de données
	$IDFamille=$piece->getIDFamille();
	$requete="SELECT id_Piece FROM PIECE AS p,VALEURDIM AS d,VALEURMELANGE AS m WHERE p.id_Piece=d.fk_id_Piece AND p.id_Piece=m.fk_id_Piece AND p.fk_Famille=$IDFamille AND (";
	$melanges=$pieceCalculee->getMelanges();
	$nbMelanges=count($melanges);
	$melange=$melanges[0];
	$requete.="(m.fk_id_Melange=$melange AND m.position=1)";
	for ($i=1;$i<$nbMelanges ;$i++)
	{
		$melange=$melanges[$i];
		$k=$i+1;
		$requete.=" OR (m.fk_id_Melange=$melange AND m.position=$k)";
	}
	$requete.=") AND (";
	$geometrie=$piece->getGeometrie();
	$nbDim=count($geometrie);
	//la pièce calculée obtient des dimensions
	$valeursGeometrie=$pieceCalculee->getDimensions();
	$dimension=$geometrie[0];
	$requete.="(d.fk_id_Dim=$dimension[0] AND d.valeur=$valeursGeometrie[0])";
	for ($i=1;$i<$nbDim;$i++)
	{
		$dimension=$geometrie[$i];
		$requete.=" OR (d.fk_id_Dim=$dimension[0] AND d.valeur=$valeursGeometrie[$i])";
	}
	$nbTuples=$nbMelanges*$nbDim;
	$requete.=") GROUP BY id_Piece HAVING COUNT(*)=$nbTuples";
	//ici je soumet ma requete
	//si j'ai une réponse la pièce existe déjà, et c'est sur elle que je devrai rajouter des calculs
	//sinon, je la cree, et je récupère l'id
	//arrivee là, j'ai de toutes les façons l'id de la piece concernée, il me reste à ajouter les resultats de chargements et de calculs sans oublier les extractions
	//mes resultats seront enregistrer et ca sera bon.
	connexion();
	$resultat=mysql_query($requete);
	$nbLignes=mysql_num_rows($resultat);
//	echo "ligne : $nbLignes";
 
	if (file_exists("/home/web/calcul/PREDIM/tempDonnees/$IDSession/$numCalcul.txt"))
	{
	if (!$nbLignes)
	{
		//on cree la piece
		$requete2="INSERT INTO PIECE(fk_Famille) VALUES ($IDFamille)";
		mysql_query($requete2);
		$IDPiece=mysql_insert_id();
		for ($i=0;$i<$nbMelanges;$i++)
		{
			$melange=$melanges[$i];
			$k=$i+1;
			$requete2="INSERT INTO VALEURMELANGE (fk_id_Piece,fk_id_Melange,position) VALUES ($IDPiece,$melange,$k)";
			mysql_query($requete2);
		}
		for ($i=0;$i<$nbDim;$i++)
		{
			$dimension=$geometrie[$i];
			$requete2="INSERT INTO VALEURDIM (fk_id_Piece,fk_id_Dim,valeur) VALUES ($IDPiece,$dimension[0],$valeursGeometrie[$i])";
			mysql_query($requete2);
		}
	}
	else
	{
		$ligne=mysql_fetch_row($resultat);
		$IDPiece=$ligne[0];
	}
	//la pièce calculée accéde aux chargements
	$chargementValeurs=$pieceCalculee->getChargements();
	$valeur_k=$chargementValeurs[$i*4];
	for ($i=0;$i<$nbChargements;$i++)
	{
		$chargement=$chargementObjectifs[$i];
		$valeur_k=$chargementValeurs[$i*4];
		$valeur_a=$chargementValeurs[$i*4+1];
		$valeur_b=$chargementValeurs[$i*4+2];
		if($valeur_k!=0 && $valeur_a!=0 && $valeur_b!=0)
		{
			$requete="INSERT IGNORE INTO VALEURCHARGEMENT (fk_id_Piece,fk_id_Chargement,valeur_a,valeur_b,valeur_k) VALUES ($IDPiece,$chargement,$valeur_a,$valeur_b,$valeur_k)";
			mysql_query($requete);	
			$extractions=$chargementValeurs[$i*4+3];
			if (!empty($extractions))
			{
				//il faut une requete pour recuperer les ID des extractions du chargement
				$requete="SELECT fk_id_Extraction FROM RELFAMCHARGEMENT WHERE fk_id_Famille=$IDFamille AND fk_id_Chargement=$chargement";
				$resultat=mysql_query($requete);
				$nbLignes=mysql_num_rows($resultat);
				for ($j=0;$j<$nbLignes;$j++)
				{
					$ligne=mysql_fetch_row($resultat);
					$valeur=$extractions[$j];			
					$requete2="INSERT IGNORE INTO VALEUREXTRA (fk_id_Piece,fk_id_Chargement,fk_id_Extraction,valeur_Extra) VALUES ($IDPiece,$chargement,$ligne[0],$valeur)";
					mysql_query($requete2);	
				}	
			}
		}
 
	}
 
 
 
 
		system ("rm /home/web/calcul/PREDIM/tempDonnees/parametres_{$numCalcul}_{$IDSession}.txt");
 
 
		copy("/home/web/calcul/PREDIM/tempDonnees/$IDSession/$numCalcul.txt","/home/web/calcul/PREDIM/donnees/resultats_calculs/$IDSession/calcul.txt");
	}
 
	// si tous les calculs ont bien été effectues et bien post-traite on peut vider le répertoire tempDonnees/$IDSession
	// et le fichier  donnees/jobs/$IDSession.txt
	if (file_exists("/home/web/calcul/PREDIM/tempDonnees/$IDSession/$max.txt"))
	{
		copy("/home/web/calcul/PREDIM/tempDonnees/$IDSession/$max.txt","/home/web/calcul/PREDIM/donnees/resultats_calculs/$IDSession/calcul.txt");
 
		system ("rm -r /home/web/calcul/PREDIM/tempDonnees/$IDSession/*");
		system ("rm -f /home/web/calcul/PREDIM/donnees/jobs/$IDSession.txt");
	}
 
}
 
?>