par
nisalon_caje » 10 janv. 2012, 23:06
Bonjour
Je n'ai toujours pas résolu le problème
Après quelques tests, j'ai néanmoins remarqué le soucis suivant :
Voilà deux scripts php que je fais tourner en même temps :
Code : Tout sélectionner
<?php
// Fichier "ecriture.php"
set_time_limit(0);
ignore_user_abort(true);
$filename = 'test.json';
$puiss = array();
for($i=0;$i<10;$i++){
$puiss[$i]=pow(10,$i+1);
}
for ($i = 0; $i < 100000; $i++) {
$data = array('a' => (mt_rand()%$puiss[rand()%10]), 'b' => (mt_rand()%$puiss[rand()%10]), 'c' => (mt_rand()%$puiss[rand()%10]));
file_put_contents($filename, json_encode($data), LOCK_EX);
}
echo 'fini';
?>
Code : Tout sélectionner
<?php
// Fichier lecture.php
set_time_limit(0);
ignore_user_abort(true);
$filename = 'test.json';
for ($i = 0; $i < 1000000; $i++) {
$data = file_get_contents($filename);
if (json_decode($data, true) == false) {
echo 'Erreur !! - "'.$data.'"';
break;
}
}
echo 'fini';
?>
Donc je fais tourner les deux en même temps et le script lecture et le script lecture s'arrête quasi immédiatement, me montrant la chaine de caractère vide ...
Alors que selon moi, le LOCK_EX aurait du empêcher cela !
EDIT : je viens de récupérer l'erreur dont je parlasi ci-avant en faisant ce test : j'ai obtenu
Bonjour
Je n'ai toujours pas résolu le problème
Après quelques tests, j'ai néanmoins remarqué le soucis suivant :
Voilà deux scripts php que je fais tourner en même temps :
[code]<?php
// Fichier "ecriture.php"
set_time_limit(0);
ignore_user_abort(true);
$filename = 'test.json';
$puiss = array();
for($i=0;$i<10;$i++){
$puiss[$i]=pow(10,$i+1);
}
for ($i = 0; $i < 100000; $i++) {
$data = array('a' => (mt_rand()%$puiss[rand()%10]), 'b' => (mt_rand()%$puiss[rand()%10]), 'c' => (mt_rand()%$puiss[rand()%10]));
file_put_contents($filename, json_encode($data), LOCK_EX);
}
echo 'fini';
?>
[/code]
[code]<?php
// Fichier lecture.php
set_time_limit(0);
ignore_user_abort(true);
$filename = 'test.json';
for ($i = 0; $i < 1000000; $i++) {
$data = file_get_contents($filename);
if (json_decode($data, true) == false) {
echo 'Erreur !! - "'.$data.'"';
break;
}
}
echo 'fini';
?>
[/code]
Donc je fais tourner les deux en même temps et le script lecture et le script lecture s'arrête quasi immédiatement, me montrant la chaine de caractère vide ...
Alors que selon moi, le LOCK_EX aurait du empêcher cela !
EDIT : je viens de récupérer l'erreur dont je parlasi ci-avant en faisant ce test : j'ai obtenu [code]{"a":71395911,"b":8808,"c":17}6}[/code]