Bonjour,
Dans le cadre du développement d'un intranet, j'utilise 2 bases de données simultanément. Mon problème est que quand je me connecte via une page appelée par une routine AJAX, le serveur Apache plante. Pour être exact, j'obtiens une fenêtre windows de type "l'instruction à xxx emploie l'adresse mémoire zzz. La mémoire ne peut pas être read/written. Cliquez sur OK pour terminer le programme". Après avoir cliqué sur "OK" Apache semble reprendre le cours normal de son existence.
J'ai réussi à isoler le problème : une page de test lance une routine AJAX qui se connecte aux 2 bases de données.
Voici la page de test (test_ajax.php) :
Et voici la page ajx.php :
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 <html> <head> <style> #loading { position: absolute; top: 0px; left: 0px; width: auto; background-color: red; display: none; } </style> </head> <body> <script> //routine de lancement de la requête AJAX function envoyer_requete( methode, url, mode, data, action, invisible ) { var xhr_object = null; // alert(invisible); if(window.XMLHttpRequest) // Firefox xhr_object = new XMLHttpRequest(); else if(window.ActiveXObject) // Internet Explorer xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); else { // XMLHttpRequest non supporté par le navigateur alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); return; } if( methode == "GET" && data != null ) { url += "?"+data; data = null; } // alert(url); xhr_object.open(methode, url, mode); xhr_object.onreadystatechange = function() { if(xhr_object.readyState == 4) { if( document.getElementById('loading') != null && invisible != true ) document.getElementById('loading').style.display = 'none'; if( xhr_object.status == 200 ) { // alert(xhr_object.responseText); eval(action); }else alert('pb avec la requête AJAX ('+xhr_object.status+') !!!'); } } if(methode == "POST") { xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded;"); } if( document.getElementById('loading') != null && invisible != true ) document.getElementById('loading').style.display = 'block'; // if( confirm('envoyer?') ) xhr_object.send(data); } //lancement de la routine avec les paramètres function AttendreTest() { var data = ''; //une fois la requête terminée, j'actualise le cadre et je relance la routine après 2 secondes var action = 'document.getElementById(\'cadre_principal\').innerHTML = xhr_object.responseText;' + 'setTimeout( \"AttendreTest()\", 2000 );'; envoyer_requete( 'GET', 'ajx.php', true, data, action ); } AttendreTest(); </script> <div id="loading">Traitement en cours...</div> <div id='cadre_principal'></div> </body> </html>
Comme vous pouvez le constater, le code est assez simple, surtout pour ajx.php. Comment je procède pour tester : j'ouvre 4 fois la page test_ajax.php et j'attends... En laissant la commande mysql_fetch_object commentée, tout se passe très bien, les pages tournent en boucle sans interruption. Si par contre de décommente la ligne, Apache plante rapidement.
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 <?php $my_xeis = mysql_connect( "localhost", "aaaaa", "zzzzz", true ); mysql_select_db( "intranet_xeis", $my_xeis ); $my_all = mysql_connect( "1.2.3.4", "aaaaa", "zzzzz", true ); mysql_select_db( "intranet_commun", $my_all ); $id_rapport = 18; $sql = "SELECT * FROM rapports WHERE id_rapport = $id_rapport;"; $result = mysql_query( $sql, $my_xeis ); //$rapport = mysql_fetch_object( $result ); sleep(5); if( $my_xeis ) mysql_close($my_xeis); if( $my_all ) mysql_close($my_all); ?>
Notez que je tourne avec Windows 2000 Pro, et qu'avec Windows XP le problème n'apparaît pas.
Ma configuration : j'utilise Wampserver 1.6.0 avec :
Version de Apache:Apache/2.0.55 (Win32)
Version de PHP:5.1.1
Extensions chargées:
bcmath, calendar, com_dotnet, ctype, date, ftp, iconv, odbc, pcre, session, libxml, standard, tokenizer, zlib, SimpleXML, dom, SPL, wddx, xml, apache2handler, mbstring, mysql
Version de MySQL:5.0.17-nt
Voilà, franchement je suis désespéré, est-ce que quelqu'un aurait une piste svp ? J'ai essayé de décrire un maximum mon problème et les conditions de son apparition, mais s'il vous faut des informations supplémentaires n'hésitez pas à me demander. Merci d'avance.
[MAJ] J'ai effectué des tests supplémentaires. J'ai testé toutes les fonctions mysql_fetch_ (array, assoc, field, lengths, object, row) et le plantage ne survient qu'avec field et object, autrement dit avec les fonctions qui renvoient un objet. Affaire à suivre...
Partager