Ještě bych k tomu dodal, že pokud ty funkce používají buffering na úrovni souborového systému, což předpokládám, není nutné se obávat nespolehlivosti a nekonzistence. Ukaž příklad, kdy k něčemu takovému došlo a rozebereme příčiny. Bez zámků se to stává jen u souborů >8 KiB.
Já ty data nekontroloval, velikost odpovídá, jenže jak vysvětlíš rozdíl v časech mezi T2 a T3, T4?
T2 bylo načítání z originálního souboru a zápis do jiného souboru (tedy dva různé soubory) a má výrazně vyšší časy, než když jsem použil T3, T4 se čtením ze stejného souboru do kterého jsem provedl zápis.
Kód T2:
echo "file_get_contents/file_put_contents test ".time()."<br>";
die;
while ( time()<1570604800 )
{
usleep(500);
}
$file = "temp.jpg";
echo "<h4>523 at ".time()."</h4>";
for ($i = 0; $i<50; $i++ ){
$start = microtime(true);
$s = file_get_contents("523");
file_put_contents("523.txt",$s,LOCK_EX);
usleep( 50 );
$time_elapsed_secs = microtime(true) - $start;
echo "time: $time_elapsed_secs s<br>";
}
echo "<h4>948 at ".time()."</h4>";
for ($i = 0; $i<50; $i++ ){
$start = microtime(true);
$s = file_get_contents("948");
file_put_contents("948.txt",$s,LOCK_EX);
usleep( 50 );
$time_elapsed_secs = microtime(true) - $start;
echo "time: $time_elapsed_secs s<br>";
}
echo "<h4>1371 at ".time()."</h4>";
for ($i = 0; $i<50; $i++ ){
$start = microtime(true);
$s = file_get_contents("1371");
file_put_contents("1371.txt",$s,LOCK_EX);
usleep( 50 );
$time_elapsed_secs = microtime(true) - $start;
echo "time: $time_elapsed_secs s<br>";
}
echo "<h4>1913 at ".time()."</h4>";
for ($i = 0; $i<50; $i++ ){
$start = microtime(true);
$s = file_get_contents("1913");
usleep( 50 );
file_put_contents("1913.txt",$s,LOCK_EX);
$time_elapsed_secs = microtime(true) - $start;
echo "time: $time_elapsed_secs s<br>";
}
echo "<h4>2701 at ".time()."</h4>";
for ($i = 0; $i<50; $i++ ){
$start = microtime(true);
$s = file_get_contents("2701");
file_put_contents("2701.txt",$s,LOCK_EX);
usleep( 50 );
$time_elapsed_secs = microtime(true) - $start;
echo "time: $time_elapsed_secs s<br>";
}
echo "<h4>4495 at ".time()."</h4>";
for ($i = 0; $i<50; $i++ ){
$start = microtime(true);
$s = file_get_contents("4495");
file_put_contents("4495.txt",$s,LOCK_EX);
usleep( 50 );
$time_elapsed_secs = microtime(true) - $start;
echo "time: $time_elapsed_secs s<br>";
}
echo "<h4>6758 at ".time()."</h4>";
for ($i = 0; $i<50; $i++ ){
$start = microtime(true);
$s = file_get_contents("6758");
usleep( 50 );
file_put_contents("6758.txt",$s,LOCK_EX);
$time_elapsed_secs = microtime(true) - $start;
echo "time: $time_elapsed_secs s<br>";
}
T3:
echo "flock test ".time()."<br>";
die;
while ( time()<1570612500 )
{
usleep(500);
}
$file = "temp.jpg";
echo "<h4>523 at ".time()."</h4>";
for ($i = 0; $i<50; $i++ ){
$start = microtime(true);
$s = file_get_contents("523.txt");
file_put_contents("523.txt",$s,LOCK_EX);
usleep( 50 );
$time_elapsed_secs = microtime(true) - $start;
echo "time: $time_elapsed_secs s<br>";
}
echo "<h4>948 at ".time()."</h4>";
for ($i = 0; $i<50; $i++ ){
$start = microtime(true);
$s = file_get_contents("948.txt");
file_put_contents("948.txt",$s,LOCK_EX);
usleep( 50 );
$time_elapsed_secs = microtime(true) - $start;
echo "time: $time_elapsed_secs s<br>";
}
echo "<h4>1371 at ".time()."</h4>";
for ($i = 0; $i<50; $i++ ){
$start = microtime(true);
$s = file_get_contents("1371.txt");
file_put_contents("1371.txt",$s,LOCK_EX);
usleep( 50 );
$time_elapsed_secs = microtime(true) - $start;
echo "time: $time_elapsed_secs s<br>";
}
echo "<h4>1913 at ".time()."</h4>";
for ($i = 0; $i<50; $i++ ){
$start = microtime(true);
$s = file_get_contents("1913.txt");
usleep( 50 );
file_put_contents("1913.txt",$s,LOCK_EX);
$time_elapsed_secs = microtime(true) - $start;
echo "time: $time_elapsed_secs s<br>";
}
echo "<h4>2701 at ".time()."</h4>";
for ($i = 0; $i<50; $i++ ){
$start = microtime(true);
$s = file_get_contents("2701.txt");
file_put_contents("2701.txt",$s,LOCK_EX);
usleep( 50 );
$time_elapsed_secs = microtime(true) - $start;
echo "time: $time_elapsed_secs s<br>";
}
echo "<h4>4495 at ".time()."</h4>";
for ($i = 0; $i<50; $i++ ){
$start = microtime(true);
$s = file_get_contents("4495.txt");
file_put_contents("4495.txt",$s,LOCK_EX);
usleep( 50 );
$time_elapsed_secs = microtime(true) - $start;
echo "time: $time_elapsed_secs s<br>";
}
echo "<h4>6758 at ".time()."</h4>";
for ($i = 0; $i<50; $i++ ){
$start = microtime(true);
$s = file_get_contents("6758.txt");
usleep( 50 );
file_put_contents("6758.txt",$s,LOCK_EX);
$time_elapsed_secs = microtime(true) - $start;
echo "time: $time_elapsed_secs s<br>";
}
To die na začátku tam je jen kvůli tomu, abych si nejdříve opsal čas a zkopíroval do while + 20 vteřin. To proto, aby se všechny 4 "exekuce" spustily ve stejný okamžik.
Kontrolu dat jsem prováděl jen od toho fflush, fwrite