2010-11-28 31 views
0

J'ai un robot d'indexation PHP qui vérifie les sites Web. J'ai décidé il y a quelques jours de faire progresser les robots en temps réel en utilisant AJAX. Le script php écrit dans un fichier dans JSON et AJAX lit le fichier minuscule. J'ai double et triple vérifié mon script PHP se demandant ce qui se passait parce qu'après avoir terminé le script AJAX simple les données apparaissant sur mon navigateur ont bondi dans des directions étranges.Tampon fou d'Ajax et script php

Le script php s'exécutait parfaitement et très rapidement mais mon AJAX augmentait lentement les valeurs, toutes les 2 secondes comme réglé, puis chutait. Les chiffres augmentent seulement en PHP, ils ne descendent pas. Cependant, les nombres apparaissant sur ma page Web montent et descendent comme si le tampon fonctionnait sur plusieurs sessions ou lisait quelque chose qui est en train d'être mis à jour même si le PHP s'est arrêté il y a environ une heure.

Y a-t-il quelque chose qui me manque ou que je devrais garder à l'écart comme un tampon ou un bouton de réinitialisation?

C'est le plus que je peux montrer, je l'ai giflé il y a très longtemps. Si vous connaissez un meilleur code alors s'il vous plaît partager, j'adore toute aide possible. Mais, je suis un peu nouveau, alors s'il vous plaît expliquer les choses en dehors des fonctions de base.

AJAX

//open our json file 

ajaxRequest.onreadystatechange = function(){ 
if(ajaxRequest.readyState == 4){ 
    //display json file contents 
document.form.total_emails.value = ajaxRequest.responseText; 
} 
} 
ajaxRequest.open("GET", "test_results.php", true); 
ajaxRequest.send(null); 

PHP

//get addresses and links 
for($x=(int)0; $x<=$limit; $x++){ 
$input = get_link_contents($link_list[0]); 
array_shift($link_list); 
$link_list = ($x%100==0 || $x==5)?filter_urls($link_list,$blacklist):$link_list; 

//add the links to the link list and remove duplicates 
if(count($link_list) <= 1000) { 
    preg_match_all($link_reg, $input, $new_links); 
    $link_list = array_merge($link_list, $new_links); 
    $link_list = array_unique(array_flatten($link_list)); 
} 

//check the addresses against the blacklist before adding to a a file in JSON 
$res = preg_match_all($regex, $input, $matches); 
if ($res) { 
    foreach(array_unique($matches[0]) as $address) { 
    if(!strpos_arr($address,$blacklist)){ 
    $enum++; 
    json_file($results_file,$link_list[0],$enum,$x); 
    write_addresses_to_file($address, $address_file); 
    } 
    } 
} 

unset($input, $res, $efile); 
} 
+2

Pourriez-vous publier les éléments pertinents de votre code? –

+1

Pas clair, mais une suggestion stupide. Etes-vous sûr que l'accès Ajax n'exécute pas votre script PHP? –

Répondre

0

Les symptômes peuvent indiquer le script PHP ne pas fermer le fichier correctement après avoir écrit, et/ou une condition de course où la routine AJAX est aller chercher les données JSON entre le fopen() de PHP et les nouvelles données en cours d'écriture.

Une solution possible serait que le script PHP écrive dans un fichier temporaire, puis renommez le nom de fichier souhaité après l'écriture des données et la fermeture correcte du fichier.

En outre, il est une bonne idée de vérifier Response.Status == 200 ainsi que response.readyState == 4.

Des outils tels que ngrep et tcpdump peut aider à déboguer ce type de problème.

+0

J'ai mis le statut == 200 et ça m'a aidé un peu mais il y a encore beaucoup de retard. – Chenelle